FreeRTOS移植,基於STM32 HAL庫
阿新 • • 發佈:2019-01-04
一、硬體準備
- 一個STM32開發板(STM32F429IGT6),及其電源線等;
- 一個ST-Link下載器及其連線線等。
二、軟體準備
- FreeRTOS原始碼(V9.0.0);
- 一個基於STM32 HAL庫的基礎例程(跑馬燈例程)。
三、移植FreeRTOS
3.1 新增FreeRTOS原始碼至工程
新增原始碼至工程目錄,新增至工程分組中,新增相關標頭檔案路徑
編譯,提示找不到 FreeRTOSConfig.h
3.2 新增 FreeRTOSConfig.h
檔案來源:事先參考眾多例程中的 FreeRTOSConfig.h 後,總結出來的
編譯結果為:2個error。SVC_Handler() 和 PendSV_Handler() 這兩個函式在 stm32f4xx_it.c 檔案和 port.c 檔案中重複定義了。
3.3 刪除2箇中斷服務函式
將 stm32f4xx_it.c 檔案和 stm32f4xx_it.h 檔案中關於 SVC_Handler() 和 PendSV_Handler() 這兩個函式的定義和宣告都刪掉,重新編譯。
編譯結果為:0 error, 0 warning。
3.4 重寫1箇中斷服務函式
在 stm32f4xx_it.c 檔案合適的位置新增如下兩段程式碼:
extern void xPortSysTickHandler(void);
和
#include "FreeRTOS.h"
#include "task.h"
分別意為增加一個函式宣告,以及包含支援該函式的兩個標頭檔案。
然後將 SysTick_Handler() 函式重寫為如下:
void SysTick_Handler(void)
{
if(xTaskGetSchedulerState()!=taskSCHEDULER_NOT_STARTED)
{
xPortSysTickHandler();
}
HAL_IncTick();
}
所做更改為:在 SysTick_Handler() 函式中增加 FreeRTOS 的滴答處理函式。
3.5 替換 main.c 檔案
將 main.c 檔案替換為我們事先準備好的 main.c 檔案。