由于平台的差异性,FreeRTOS容易出现栈的溢出等现象,这时候在调试的时候使用
void vTaskList( char * pcWriteBuffer ) 这个函数很有必要
这个函数可以打印出栈名 栈状态 优先级 栈的剩余空间
这样就一目了然了,demo如下
void TASK_LIST(void *arg)
{
char pWriteBuffer[2048];
for(;;)
{
sys_msleep(10000);
vTaskList((char *)&pWriteBuffer);
printf("task_name task_state priority stack tasK_num\n");
printf("%s\n", pWriteBuffer);
}
vTaskDelete(NULL);
return;
}
打印如下
task_name task_state priority stack tasK_num
TASK_LIST R 4 341 20
LOGUART_T B 5 457 1
R代表准备态 ready
B代表阻塞态 blocked
注意在FreeRTOSconfig.h要打开:
configUSE_TRACE_FACILITY 1
configUSE_STATS_FORMATTING_FUNCTIONS 1
得到了上面的任务剩余栈区大小,有利于后期开发的优化