1. 程式人生 > >FreeRTOS移植,基於STM32 HAL庫

FreeRTOS移植,基於STM32 HAL庫

一、硬體準備

  1. 一個STM32開發板(STM32F429IGT6),及其電源線等;
  2. 一個ST-Link下載器及其連線線等。

二、軟體準備

  1. FreeRTOS原始碼(V9.0.0);
  2. 一個基於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 檔案。