Freertos任务切换异常问题

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

 Freertos任务切换异常问题_第1张图片

经分析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

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

 

你可能感兴趣的:(嵌入式系统,嵌入式-单片机,单片机,stm32,物联网)