Freertos任务切换异常问题

最近调试运行了freertos的代码时发现程序不知为何任务切换不了,经检查发现程序死在了断言中,这个断言所处的函数是vTaskSwitchContext。这个函数的作用是任务切换用的,断言的位置如下图所示:

 

经分析vTaskSwitchContext()函数的作用是寻找当前就绪列表中优先级最高的任务,然后运行此任务,进入这个断言中说明当前没有就绪任务。为啥会出现这种情况呢?按我的理解当用户任务都阻塞了,空闲任务应该就会进入就绪态呀?网上找了找可能的原因如下:

1.栈空间太小,导致溢出了

2.优先级设置不对

参考链接如下:

1.Problem with array bounds for pxReadyTasksLists (FreeRTOS 8.2.x) - #4 by RAc - Kernel - FreeRTOS Community Forums

2.FreeRTOS卡在空闲任务,无法调度,产生假死现象 - 小平头电子技术论坛社区

3.Application stucks on "taskSELECT_HIGHEST PRIORITY_TASK" because get invalid ready list - Kernel - FreeRTOS Community Forums

4.FreeRTOS hangs when no task needs to run. - Kernel - FreeRTOS Community Forums

根据这些资料检查了半天也没发现哪里有问题,后面我把断言检查功能关闭,程序又一直运行正常。但显然这是一种不负责任的做法。希望遇到同样问题的工程师能分享一下你的解决办法

 

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 12
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值