FreeRTOS - STM32中任务未进行调度问题

本文记录了在将FreeRTOS操作系统移植到STM32F10X芯片过程中遇到的任务无法运行的问题。问题表现为新任务未执行,仅打印初始化串口信息。经过排查,确定为FreeRTOSConfig.h配置文件中缺少SVC和PendSV异常的宏定义。修复方法是添加相应的宏,并重命名异常处理函数名称以匹配FreeRTOS源码。完成这些修改后,任务调度恢复正常。

将FreeRTOS源码移植到STM32F10X中,编译通过,烧录后,发现开启的新任务没有运行。

现象:串口值仅仅打印了 printf("TesetesettettttttttttesT\r\n");

          子任务中没有 循环打印 printf("start_task! \r\n");

          任务创建返回值正确 printf("ret = %ld \r\n", ret); 返回值为1 

原因判断:最开始怀疑,任务堆栈过小,但都没有解决,最后判断是未进入start_task任务中,没有任务调度。

原始代码如下:

 FreeRTOS 的任务调度,是由调度器在sysTick中断中执行,同时为了中断服务得到及时响应,引入pendSV 执行任务上下文切换。

最终发现在FreeRTOSConfig.h 配置文件中没有 配置SVC异常和PenSV异常 的宏,增加下图红框中的宏定义,重命名这两个异常的函数实现名字。

#define xPortPendSVHandler 	PendSV_Handler
#define vPortSVCHandler 	SVC_Handler

 xPortPendSVHandler 和 vPortSVCHandler 是FreeRTOS源码中port.h文件实现的,但是STM32 原始的异常函数名应该为PendSV_Handler 和 SVC_Handler,所以将其重命名即可。

修改后,任务调度正常。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

有意思科技

给与不给,我都会更新

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值