FreeRTOS系统移植到STM32

目录

第一步

下载FreeRTOS

第二步

新建文件夹,复制文件

​编辑

复制FreeRTOSConfig.h文件

根据型号选择文件

添加路径

最终效果

添加头文件路径

问题汇总及解决办法

问题1

解决办法

问题2

解决办法


第一步

下载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);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值