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


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

在调试FreeRTOS系统时,程序在vTaskSwitchContext()函数中出现断言失败,导致任务无法切换。该函数负责选取优先级最高的任务执行,而断言提示当前无就绪任务。可能的原因包括栈空间不足、优先级设置错误等。博主检查了相关资源并尝试关闭断言,发现程序能正常运行,但这并非长久之计。期望有经验的工程师分享解决此类问题的方法。

2035

被折叠的 条评论
为什么被折叠?



