FreeRTOS打印任务状态#
FreeRTOS中如果想使用 vTaskList
函数来打印系统任务状态信息,以下配置项必须为1:
configUSE_TRACE_FACILITY
configUSE_STATS_FORMATTING_FUNCTIONS
4431#if ( ( configUSE_TRACE_FACILITY == 1 ) && ( configUSE_STATS_FORMATTING_FUNCTIONS > 0 ) )
4432
4433void vTaskList( char * pcWriteBuffer )
4434{
4435...
该函数内部先调用 uxTaskGetSystemState
函数获取任务状态原始数据,再将这些原始数据格式化为方便人为查看的字符串。
该函数只格式化了任务状态原始数据中的 任务名称 、 任务状态 、 任务优先级 、 任务栈空闲深度 、 任务号
警告
该函数只应做为调试阶段使用,在发布版中应少用。
- 示例:
void vApplicationStackOverflowHook(osThreadId_t xTask, char *pcTaskName) { extern void vTaskList( char * pcWriteBuffer ); vTaskList(tasks_status); #ifdef ELOG_ASSERT_ENABLE elog_async_enabled(false); #endif elog_raw("task name status priority statck id\r\n"); elog_raw("==========================================\r\n"); elog_raw(tasks_status); osThreadExit(); }
当有任务发生栈溢出时会打印如下信息:
System core frequencey:48000000Hz task name status priority statck id ========================================== elog R 1 118 2 IDLE R 0 118 3 defaultTask X 24 0 1 Tmr Svc B 40 20 4
可以看出 defaultTask 的栈空间为0,它发生了栈溢出