參考資料:https://blog.csdn.net/u010860832/article/details/86235993
這里把移植經驗記錄下來,供有需要的同學參考,有不對的地方也請大家批評指正。
把FreeRTOS移植到 nRF5_SDK_15.3.0_59ac345\examples\ble_peripheral\ble_app_uart工程,在keil上移植。本身SDK中有一個工程可以做參考:nRF5_SDK_15.3.0_59ac345\examples\ble_peripheral\ble_app_hrs_freertos。
1,把nRF5_SDK_15.3.0_59ac345\examples\ble_peripheral\ble_app_hrs_freertos下面的config文件夾拷貝到nRF5_SDK_15.3.0_59ac345\examples\ble_peripheral\ble_app_uart\pca10040\s132\arm5_no_packs目錄下(其實這里可以拷貝任何目錄下,只需要配置好keil的編譯應用目錄就OK)。如下圖:
2,把FreeRTOS相關的C文件添加到工程,如下圖
“Third Parties” 可以根據自己喜好隨便寫名字。然后,
去掉文件..\..\..\..\..\..\..\components\libraries\timer\app_timer.c
..\..\..\..\..\..\..\components\libraries\scheduler\app_scheduler.c,如下圖:
添加文件
..\..\..\..\..\..\components\softdevice\common\nrf_sdh_freertos.c,
..\..\..\..\..\..\..\components\libraries\timer\app_timer_freertos.c,入下圖:
..\..\..\..\..\..\..\components\libraries\hardfault\nrf52\handler\hardfault_handler_keil.c 這個文件可加可不加,我沒有加也沒有出現問題,不知道后續開發是否會遇到問題,遇到問題再來更新(歡迎大家批評指正)
然后將宏NRF_SDH_DISPATCH_MODEL 由0改為2(sdk_config.h),configUSE_TIMERS宏由0改為1(freeRTOSConfig.h)
然后再將需要的對應的頭文件添加上
..\..\..\..\..\..\..\external\freertos\source\include
..\..\..\..\..\..\..\external\freertos\config
..\..\..\..\..\..\..\external\freertos\portable\ARM\nrf52
..\..\..\..\..\..\..\external\freertos\portable\CMSIS\nrf52
3,再然后就是main函數的修改了,這個比較簡單,只需要按照demo改就可以啦!
補充一點:上面的移植成功后,你的系統可以正常運行,打log你會發現,系統運行2分鍾后會停止,這是怎么回事呢?這是因為,系統起來的時候 打開藍牙廣播,設置了一個廣播的超時時間,超時時間到了之后
會調用系統API把系統設置到sleep模式:
做系統設計的時候需要注意該問題。