freertos 移植考虑最大的问题 是
1.FreeRTOSConfig.h 的修改
2.内存管理方案的选择
3.编译方案及处理器的选择 : FreeRTOS/Source/portable/GCC/ARM_CM4F
- freertos 代码下载
https://sourceforge.net/projects/freertos/files/FreeRTOS/
代码托管网站上可以选择代码版本 //下载FreeRTOSv9.0.0.zip
http://www.freertos.org/
官方网站只能下载最新版,且为exe,运行exe会解压出代码
-
基础代码为 stm32-develop-in-linux 中的代码
-
移植过程1 文件复制
mkdir FreeRTOS_9_0_0/CORE -p
cp ../FreeRTOSv9.0.0/FreeRTOS/Source/*.c FreeRTOS_9_0_0/CORE
mkdir FreeRTOS_9_0_0/PORT -p
cp ../FreeRTOSv9.0.0/FreeRTOS/Source/portable/MemMang/heap_4.c FreeRTOS_9_0_0/PORT #内存管理方案,有5个,选了heap_4
cp ../FreeRTOSv9.0.0/FreeRTOS/Source/portable/GCC/ARM_CM4F/* FreeRTOS_9_0_0/PORT #因为是arm-gcc方案,所以选择了 GCC,因为是stm32f407,所以选择了ARM_CM4F
cp ../FreeRTOSv9.0.0/FreeRTOS/Demo/CORTEX_M4F_STM32F407ZG-SK/FreeRTOSConfig.h FreeRTOS_9_0_0/PORT/ #核心配置文件,因为是stm32f407,所以选择了 CORTEX_M4F_STM32F407ZG-SK
- 文件修改,保证编译
FreeRTOS_9_0_0/PORT/FreeRTOSConfig.h
87c87
< #if defined (__ICCARM__)||defined(__CC_ARM) ||defined(__GNUC__)
---
> #ifdef __ICCARM__
93,94c93,94
< #define configUSE_IDLE_HOOK 0
< #define configUSE_TICK_HOOK 0
---
> #define configUSE_IDLE_HOOK 1
> #define configUSE_TICK_HOOK 1
106c106
< #define configCHECK_FOR_STACK_OVERFLOW 0
---
> #define configCHECK_FOR_STACK_OVERFLOW 2
108c108
< #define configUSE_MALLOC_FAILED_HOOK 0
---
> #define configUSE_MALLOC_FAILED_HOOK 1
- 文件修改(只有一处,SysTick_Handler),保证运行
FreeRTOS_9_0_0/PORT/FreeRTOSConfig.h
//#define xPortSysTickHandler SysTick_Handler // 注释该句
void SysTick_Handler(void)
{
if (xTaskGetSchedulerState() != taskSCHEDULER_NOT_STARTED){
xPortSysTickHandler()
}
}