日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

BLE程序框架探索

發布時間:2025/3/21 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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程序框架探索的全部內容,希望文章能夠幫你解決所遇到的問題。

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