目录
第一步
下载FreeRTOS
去https://sourceforge.net/projects/freertos/files/FreeRTOS/下载FreeRTOS的V9.0.0版本


第二步
新建文件夹,复制文件
复制FreeRTOSConfig.h文件
选择移植的单片机相同的系列和内核复制


根据型号选择文件

添加路径


最终效果

添加头文件路径

问题汇总及解决办法
完成后编译工程,可能会出现以下问题
问题1
..\FreeRTOS\port\RVDS\ARM_CM0\port.c(345): error: #20: identifier "SystemCoreClock" is undefined
解决办法

/* 不论什么编译器,都声明这个变量 */
#include <stdint.h>
extern uint32_t SystemCoreClock;
/* 如果一定要区分编译器,Keil 使用 __CC_ARM 或 __ARMCC_VERSION */
#if defined(__ICCARM__) || defined(__CC_ARM) || defined(__ARMCC_VERSION)
/* 这里的声明在 IAR 和 Keil 下都会生效 */
#endif
问题2
CTW\CTW.axf: Error: L6218E: Undefined symbol vApplicationStackOverflowHook (referred from tasks.o).
CTW\CTW.axf: Error: L6218E: Undefined symbol vApplicationTickHook (referred from tasks.o).
CTW\CTW.axf: Error: L6218E: Undefined symbol vApplicationMallocFailedHook (referred from heap_4.o).
Not enough information to list image symbols.
Not enough information to list load addresses in the image map.
解决办法

#include "FreeRTOS.h"
#include "task.h"
#include "timers.h"
/* 1. 堆栈溢出钩子函数 */
void vApplicationStackOverflowHook(TaskHandle_t xTask, char *pcTaskName)
{
/* 当某个任务的堆栈超过预设大小时,会进入这里 */
/* 调试时可以查看 pcTaskName 确认是哪个任务溢出了 */
__disable_irq();
while(1);
}
/* 2. 滴答定时器钩子函数 */
void vApplicationTickHook(void)
{
/* 每个 Tick 中断都会调用一次,如果不需要功能,可以留空 */
}
/* 3. 内存申请失败钩子函数 */
void vApplicationMallocFailedHook(void)
{
/* 当 pvPortMalloc 申请不到内存(堆内存不足)时,会进入这里 */
__disable_irq();
while(1);
}
移植结束,编译没有报错,写一个点灯程序程序,功能正常。

HAL_GPIO_TogglePin(GPIOA, DBG_Pin);
HAL_Delay(100);

2761

被折叠的 条评论
为什么被折叠?



