本文檔記錄在MDK編譯環境下移植FreeRTOS到NRF52832上(測試板:PC10040)。
官方SDK里面其實已經有移植好的 (examples\peripheral\blinky_freertos)
1、下載連接
FreeRTOS: https://www.freertos.org/a00104.html
nRF5_SDK: https://www.nordicsemi.com/Software-and-Tools/Software/nRF5-SDK
FreeRTOSv10.1.1 文件打開后如下,為了查看代碼清晰點去掉無用文件和文件夾(紅色圈以外的文件)
2、新建工程
1)、新建工程過程略過,下面兩張圖記錄工程文件目錄及工程配置
注:system_nrf52.c、arm_startup_nrf52.s 是來自這個目錄下 nRF5_SDK_15.2.0_9412b96\modules\nrfx\mdk
2)、工程根目錄下文件描述
FreeRTOSConfig.h 復制於 nRF5_SDK_15.2.0_9412b96\examples\peripheral\blinky_freertos\config\FreeRTOSConfig.h
sdk_config.h 復制於 nRF5_SDK_15.2.0_9412b96\examples\peripheral\blinky_freertos\pca10040\blank\config\sdk_config.h
main.c 修改如下,主要功能創建1個任務每間隔1s執行1次LED(GPIO17)亮滅切換
#include "FreeRTOS.h" #include "task.h" #include "nrf_drv_clock.h" #include "nrf_gpio.h" #include "sdk_errors.h" #define TASK_DELAY (1000) TaskHandle_t led_toggle_task_handle; #define GPIO_LED_PIN (17) static void led_toggle_task_function(void *pvParameter){ while(1){ nrf_gpio_pin_toggle(GPIO_LED_PIN); vTaskDelay(TASK_DELAY); } } int main(void){ ret_code_t err_code; err_code = nrf_drv_clock_init(); nrf_gpio_cfg_output(GPIO_LED_PIN); xTaskCreate(led_toggle_task_function, "LED0", configMINIMAL_STACK_SIZE + 200, NULL, 2, &led_toggle_task_handle); vTaskStartScheduler(); return 0; }
3、編譯、燒錄略
End!!!