FreeRTOS监测栈空间的方法——vTaskList的使用

由于平台的差异性,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

得到了上面的任务剩余栈区大小,有利于后期开发的优化

你可能感兴趣的:(FreeRTOS)