日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

BLE程序框架探索

發布時間:2025/3/21 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 BLE程序框架探索 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在這篇文章里我主要探究SoftDevice程序是怎么嵌入到BLE程序中的,研究一下BLE程序框架:

在函數softdevice_handler_init中有這樣的一句調用語句:
? ?? ???err_code = sd_softdevice_enable(clock_source, softdevice_assertion_handler);
我們就從這句話入手:
? ?? ???全局搜索sd_softdevice_enable可以在Include\s110\nrf_sdm.h文件里看到這回句話:
? ?? ???SVCALL(SD_SOFTDEVICE_ENABLE, uint32_t, sd_softdevice_enable(nrf_clock_lfclksrc_t clock_source, softdevice_assertion_handler_t assertion_handler));
再看看SVCALL函數,可以跳到Include\s110\nrf_svc.h的這個地方:
? ?? ?? ?#ifndef SVCALL
? ?? ?? ?#if defined (__CC_ARM)
? ?? ?? ?#define SVCALL(number, return_type, signature) return_type __svc(number) signature
這里的signature就是要調用的函數sd_softdevice_enable,number是傳給svc中斷的一個參數,指定某段程序
整體來考慮可以猜測:
? ?? ???所謂的SD調用是靠svc系統調用中斷來實現的,那么就可以想象真正調用SD函數的代碼就是存在svc中斷里的,但是我們在svc中斷中并沒有找到相應的調用語句,那么就可以猜測所謂的協議棧就是一段放在單片機起始位置的一段很長的代碼,這個代碼中的svc中斷中必定調用了真正的SD程序。那么這個機制就有點像API程序一樣,BLE程序就是應用程序,協議棧就是引導程序。
? ?? ???為了證明我這個猜測,我找到了兩個證據:
? ?? ???1.BLE程序并沒有真正的中斷函數,是用鉤子函數的機制實現用戶中斷的,因為POWER_CLOCK_IRQHandler,RADIO_IRQHandler,-----------這些函數程序里都沒有實現,而定時器初始化卻有這樣的一句話:err_code = app_timer_create(&m_app_timer_id, APP_TIMER_MODE_REPEATED, timer_timeout_handler);那么timer_timeout_handler函數就是鉤子函數
? ?? ???2.程序的開始地址并不是單片機的起始地址,所以我的猜測是對的。

總結

以上是生活随笔為你收集整理的BLE程序框架探索的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。