FreeRTOS移植

ike_li / 2023-05-22 / 原文

一、

   1.FreeRTOS源码结构分析与移植(基于STM32F407) https://bbs.huaweicloud.com/blogs/296103

二、

1.在项目新建文件夹FreeRTOS,把FreeRTOSv202112.00\FreeRTOS\Source 所有文件拷贝到新建的文件夹。

 2.STM32F40x_FreeRTOS_Test\FreeRTOS\portable ,protable中保留如下三个文件,其它删除掉

 3.添加头文件路径

STM32F40x_FreeRTOS_Test\FreeRTOS\include

STM32F40x_FreeRTOS_Test\FreeRTOS\portable\RVDS\ARM_CM4F

 

4.FreeRTOSConfig.h

FreeRTOSv202112.00\FreeRTOS\Demo\CORTEX_M4F_STM32F407ZG-SK\FreeRTOSConfig.h 拷贝到 STM32F40x_FreeRTOS_Test\FreeRTOS\include

 

5.编译,出错“..\FreeRTOS\portable\RVDS\ARM_CM4F\port.c(734): error:  #20: identifier "SystemCoreClock" is undefined”

因为在"FreeRTOSConfig.h" : 中使用了SysyemCoreClock来标记MCU的频率。

在FreeRTOSConfig.h 第45行,#ifdef __ICCARM__ 修改成 #if defined(__ICCARM__) || defined(__CC_ARM) || defined(__GNU__)

 

6.编译,出以下错误信息

.\Objects\STM32F40x_FreeRTOS_Test.axf: Error: L6200E: Symbol SVC_Handler multiply defined (by stm32f4xx_it.o and port.o).
.\Objects\STM32F40x_FreeRTOS_Test.axf: Error: L6200E: Symbol PendSV_Handler multiply defined (by stm32f4xx_it.o and port.o).
.\Objects\STM32F40x_FreeRTOS_Test.axf: Error: L6200E: Symbol SysTick_Handler multiply defined (by stm32f4xx_it.o and port.o).

 

在FreeRTOSConfig.h 中已定义,和stm32f4xx_it.c中冲突,

 

 

 在stm32f4xx_it.c注释掉SVC_Handler,PendSV_Handler,SysTick_Handler 三个函数。

 

7.编译,出以下错误信息

 

这是因为在"FreeRTOSConfig.h"中定义了这些钩子函数,但未找到函数定义,我们先注释掉这些定义,

就是将configUSE_IDLE_HOOK,configUSE_TICK_HOOK,configCHECK_FOR_STACK_OVERFLOW,configUSE_MALLOC_FAILED_HOOK 宏定义定义为0即可.

 

8.编译,无错误信息,成功。