簡介
通過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開始閃爍,任務創建並成功運行。