簡介
通過STM32CubeMX建立MDK工程,手動進行FreeRTOS移植,以及任務創建。
開發平台
硬件平台:STM32F746 Discovery Kit
軟件源碼:FreeRTSO V9.0.0
開發環境:MDK V5.28
移植准備
- 源碼獲取
通過訪問FreeRTOS官網可以直接下載源碼,解壓后文件夾的FreeRTOS目錄包含了移植所需的文件和一些Demo。 - 工程准備
打開STM32CubeMX,選擇芯片STM32F746NGHx創建工程,在System Core欄目下的RCC項配置LSE為Crystal/Ceramic Resonator,HSE為BYPASS Clock Source

根據官方的原理圖,選擇控制LD1的閃爍作為一個任務,所以配置該引腳為輸出模式

配置系統時鍾

在工程管理導航欄設置工程名稱、保存路徑和IDE類別,然后點擊右上角GENERATE CODE按鈕生成工程

源碼移植
-
在工程根目錄建立FreeRTOS文件夾,並建立Source、Include、Portable三個子目錄,存放有關於FreeRTOS的源碼

-
源碼文件夾
FreeRTOS/Source路徑下的所有.c文件復制到剛才建立的Source文件夾

-
源碼文件夾
FreeRTOS/Source/include路徑下的所有.h文件復制到剛才建立的Include文件夾

-
源碼文件夾
FreeRTOS/Source/portable/MemMang路徑的所有.c文件和FreeRTOS/Source/portable/RVDS/ARM_CM7/r0p1路徑下的所有文件復制到剛才建立的Portable文件夾

-
源碼文件夾
FreeRTOS/Demo/CORTEX_M7_STM32F7_STM32756G-EVAL_IAR_Keil路徑下的FreeRTOSConfig.h文件復制到剛才建立的FreeRTOS目錄下,該文件是對FreeRTOS內核功能的配置文件,需要好好了解每個宏定義配置的功能。
MDK配置及文件修改
-
使用MDK打開工程,把建立的FreeRTOS目錄下文件添加到工程中,並且添加包含路徑

-
修改
stm32f7xx_it.c文件,屏蔽掉SVC_Handler、PendSV_Handler、SysTick_Handler三個函數。工程中把HAL庫與FreeRTOS共用Systic,所以在FreeRTOS的xPortSysTickHandler函數中添加HAL_IncTick函數的執行。

-
修改
FreeRTOSConfig.h文件,否則暫時狀態下編譯會報錯。把configUSE_IDLE_HOOK、configUSE_TICK_HOOK、configCHECK_FOR_STACK_OVERFLOW、configUSE_MALLOC_FAILED_HOOK這幾個宏定義設為0;重定義configASSERT( x ),或者實現vAssertCalled函數。
創建任務
-
在main.c中包含有關於FreeRTOS的.h文件

-
創建任務句柄和入口函數

-
創建並啟動調度器

總結
編譯后下載程序,觀察到板子上LD1開始閃爍,任務創建並成功運行。
