FreeRTOS:eTaskConfirmSleepModeStatus为何不返回eNoTasksWaitingTimeout?
FreeRTOS Tickless模式调试疑问
我在启用Tickless模式的FreeRTOS中调试代码时遇到了问题:
调用的函数如下:
eSleepModeStatus eTaskConfirmSleepModeStatus( void ) { /* The idle task exists in addition to the application tasks. */ const UBaseType_t uxNonApplicationTasks = 1; eSleepModeStatus eReturn = eStandardSleep; /* This function must be called from a critical section. */ if( listCURRENT_LIST_LENGTH( &xPendingReadyList ) != 0 ) { /* A task was made ready while the scheduler was suspended. */ eReturn = eAbortSleep; } else if( xYieldPending != pdFALSE ) { /* A yield was pended while the scheduler was suspended. */ eReturn = eAbortSleep; } else { /* If all the tasks are in the suspended list (which might mean they have an infinite block time rather than actually being suspended) then it is safe to turn all clocks off and just wait for external interrupts. */ if( listCURRENT_LIST_LENGTH( &xSuspendedTaskList ) == ( uxCurrentNumberOfTasks - uxNonApplicationTasks ) ) { eReturn = eNoTasksWaitingTimeout; } else { mtCOVERAGE_TEST_MARKER(); } } return eReturn; }
当前xPendingReadyList长度为0(无待就绪任务),xYieldPending为false,但xSuspendedTaskList长度为9,uxCurrentNumberOfTasks为14,缺失的5个任务去向不明。调试显示除Idle任务外其他任务均处于挂起或阻塞状态,但该函数始终不返回eNoTasksWaitingTimeout,希望能得到解惑。

内容的提问来源于stack exchange,提问作者WITC
相关产品推荐
相关产品推荐

