1?簡介
在嵌入式領(lǐng)域中,嵌入式實時操作系統(tǒng)正得到越來越廣泛的應(yīng)用。采用嵌入式實時操作系統(tǒng)(RTOS)可以更合理、更有效地利用 CPU 的資源,簡化應(yīng)用軟件的設(shè)計,縮短系統(tǒng)開發(fā)時間,更好地保證系統(tǒng)的實時性和可靠性。
FreeRTOS是一個RTOS類的嵌入式實時操作系統(tǒng),具有源碼公開、可移植、可裁減、調(diào)度策略靈活的特點,可以方便地移植到各種單片機上運行。
MM32F5270是一款搭載了安謀科技 Arm Cortex-M33/STAR-MC1內(nèi)核的MCU產(chǎn)品,其工作頻率可達 120MHz,具有256KB Flash和192KB RAM,內(nèi)置單精度浮點運算單元(Floating Point Unit,F(xiàn)PU),并支持數(shù)字信號處理(Digital Signal Processing, DSP)擴展,提供實時處理和高級中斷處理能力,實現(xiàn)性能和電源效率的平衡,適合用于各種類型的實時控制應(yīng)用。
本系列微課堂基于MM32F5270 MCU初步學(xué)習(xí)使用FreeRTOS開發(fā),不足之處歡迎指出。
2?FreeRTOS移植
2.1 源碼下載
點擊官網(wǎng)標題下的Download可以去下載FreeRTOS源碼,當(dāng)前版本是V10.5.1(task.h文件中有注明版本)。
內(nèi)容如下:
包括3個文件夾、4個HTML格式的網(wǎng)頁和2個.txt文檔,重點在于上面的FreeRTOS 和FreeRTOS-Plus兩個文件夾,其中FreeRTOS文件夾的內(nèi)容就是FreeRTOS內(nèi)核源碼,而Plus版本還包括內(nèi)核以外的組件和第三方補充,對于FreeRTOS移植,我們只需要用到FreeRTOS內(nèi)核源碼就行了。
FreeRTOS文件夾內(nèi)容:
Demo文件夾里面是 FreeRTOS的例程;
License文件夾里面是相關(guān)的許可信息;
Source文件夾是FreeRTOS源碼;
Test文件夾是FreeRTOS的相關(guān)測試。
Source文件夾內(nèi)容:
其中.c文件就是FreeRTOS的源碼文件,include文件夾是源碼包含的一些頭文件,portable文件夾是FreeRTOS操作系統(tǒng)和具體硬件的連接層。
portable文件夾內(nèi)容:
不同MCU內(nèi)核及編譯環(huán)境對應(yīng)的portable文件有所差異,MemMang文件跟內(nèi)存管理相關(guān)。
2.2 移植
移植 FreeRTOS首先需要一個基礎(chǔ)工程,可以參考MM32F5270 LibSamples創(chuàng)建工程,或直接在任一例程基礎(chǔ)上改動。
1) 向工程中添加FreeRTOS源碼
在工程中新建一個名為FreeRTOS的文件夾:
將FreeRTOS相關(guān)文件復(fù)制到此文件夾下:
portable文件夾只留下GCC和MemMang兩個文件夾,其他的都可以刪除。
2) 向工程分組中添加文件
打開基礎(chǔ)工程,新建分組 FreeRTOS_CORE 和 FreeRTOS_PORTABLE,然后向這兩個分組中添加文件:
port.c文件位于portable\GCC\ARM_CM33_NTZ\non_secure文件夾。
heap_4.c文件位于portable\MemMang文件夾,提供RTOS內(nèi)核所需的內(nèi)存分配。
3) 添加頭文件路徑
添加FreeRTOS源碼的頭文件路徑:
4) 加入FreeRTOSConfig.h文件
FreeRTOSConfig.h是FreeRTOS的配置文件,通過宏定義來完成對系統(tǒng)的配置和裁剪??梢宰约簞?chuàng)建(參考 http://www.freertos.org/a00110.html),也可以從FreeRTOS的官方移植工程中復(fù)制。這里復(fù)制FreeRTOSDemoCORTEX_MPU_M33F_Simulator_Keil_GCCConfigFreeRTOSConfig.h。
5)修改重復(fù)定義的函數(shù)
FreeRTOS在port.c中定義了SysTick_Handler()、SVC_Handler()和PendSV_Handler()這三個函數(shù),需要將工程mm32f5270_it.c中定義的三個同名函數(shù)注釋掉。
6) 編譯和修改
編譯后如果一些報錯或警告,根據(jù)提示修改即可,一般和Contex-M33的特定配置選項有關(guān),如configENABLE_MPU、configENABLE_FPU、configENABLE_TRUSTZONE 根據(jù)實際應(yīng)用情況來適配。
另外還要在FreeRTOSConfig.h修改如下宏定義:
設(shè)置configCPU_CLOCK_HZ為120000000,和當(dāng)前MCU配置的系統(tǒng)時鐘頻率一致。
設(shè)置configTICK_RATE_HZ為1000,即FreeRTOS時鐘節(jié)拍周期是1ms。
3?驗證
開發(fā)板使用Mini-F5277-OB,編寫簡單的FreeRTOS應(yīng)用代碼,測試FreeRTOS的移植是否成功。設(shè)計四個任務(wù):start_task()、led1_task ()、led2_task ()和 float_task(),功能如下:
start_task():用來創(chuàng)建其他三個任務(wù)。
led1_task ():控制 LED1 的閃爍,提示系統(tǒng)正在運行。
led2_task ():控制 LED2 的閃爍。
float_task():浮點測試任務(wù),用于測試FPU是否工作正常。
代碼如下:
voidstart_task(void*pvParameters) { taskENTER_CRITICAL(); xTaskCreate((TaskFunction_t)led1_task, (constchar*)"led1_task", (uint16_t)LED1_STK_SIZE, (void*)NULL, (UBaseType_t)LED1_TASK_PRIO, (TaskHandle_t*)&LED1Task_Handler); xTaskCreate((TaskFunction_t)led2_task, (constchar*)"led2_task", (uint16_t)LED2_STK_SIZE, (void*)NULL, (UBaseType_t)LED2_TASK_PRIO, (TaskHandle_t*)&LED2Task_Handler); xTaskCreate((TaskFunction_t)float_task, (constchar*)"float_task", (uint16_t)FLOAT_STK_SIZE, (void*)NULL, (UBaseType_t)FLOAT_TASK_PRIO, (TaskHandle_t*)&FLOATTask_Handler); vTaskDelete(StartTask_Handler); taskEXIT_CRITICAL(); } voidled1_task(void*p_arg) { while(1) { PLATFORM_LED_Toggle(LED1); vTaskDelay(100); } } voidled2_task(void*p_arg) { while(1) { PLATFORM_LED_Toggle(LED2); vTaskDelay(500); } } voidfloat_task(void*p_arg) { staticfloatfloat_num=0.00; while(1) { float_num+=0.01f; printf("float_num=%.4f ",float_num); vTaskDelay(1000); } }
主函數(shù):
intmain(void) { NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4); PLATFORM_Init(); xTaskCreate((TaskFunction_t)start_task, (constchar*)"start_task", (uint16_t)START_STK_SIZE, (void*)NULL, (UBaseType_t)START_TASK_PRIO, (TaskHandle_t*)&StartTask_Handler); vTaskStartScheduler(); }
程序執(zhí)行情況:
板載LED1、LED2分別間隔100ms、500ms閃爍。
串口調(diào)試助手打印float_num的值不斷增加,每次增加0.01,工程和KEIL已經(jīng)設(shè)置使用FPU,調(diào)試觀察會用到浮點寄存器s0、s2和浮點指令VLDR、VADD.F32。
與程序設(shè)置相符,F(xiàn)reeRTOS移植成功。
-
mcu
+關(guān)注
關(guān)注
146文章
17148瀏覽量
351184 -
嵌入式
+關(guān)注
關(guān)注
5082文章
19123瀏覽量
305147 -
RTOS
+關(guān)注
關(guān)注
22文章
813瀏覽量
119630 -
FreeRTOS
+關(guān)注
關(guān)注
12文章
484瀏覽量
62172 -
實時操作系統(tǒng)
+關(guān)注
關(guān)注
1文章
198瀏覽量
30758
原文標題:靈動微課堂 (第283講)|基于MM32F5270移植FreeRTOS
文章出處:【微信號:MindMotion-MMCU,微信公眾號:靈動MM32MCU】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論