最近调试运行了freertos的代码时发现程序不知为何任务切换不了,经检查发现程序死在了断言中,这个断言所处的函数是vTaskSwitchContext。这个函数的作用是任务切换用的,断言的位置如下图所示:
经分析vTaskSwitchContext()函数的作用是寻找当前就绪列表中优先级最高的任务,然后运行此任务,进入这个断言中说明当前没有就绪任务。为啥会出现这种情况呢?按我的理解当用户任务都阻塞了,空闲任务应该就会进入就绪态呀?网上找了找可能的原因如下:
1.栈空间太小,导致溢出了
2.优先级设置不对
参考链接如下:
2.FreeRTOS卡在空闲任务,无法调度,产生假死现象 - 小平头电子技术论坛社区
4.FreeRTOS hangs when no task needs to run. - Kernel - FreeRTOS Community Forums
根据这些资料检查了半天也没发现哪里有问题,后面我把断言检查功能关闭,程序又一直运行正常。但显然这是一种不负责任的做法。希望遇到同样问题的工程师能分享一下你的解决办法