最近调试运行了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
根据这些资料检查了半天也没发现哪里有问题,后面我把断言检查功能关闭,程序又一直运行正常。但显然这是一种不负责任的做法。希望遇到同样问题的工程师能分享一下你的解决办法
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)