通过
vTaskList
来协助分析操作系统当前 task 状态,以帮助优化内存,帮助定位栈溢出问题。
void vTaskList( char *pcWriteBuffer );
parameter | description |
---|---|
pcWriteBuffer | 保存任务状态信息表的存储区,须足够大 |
return | 空 |
pcWriteBuffe
表中信息
注意事项:
在使用
vTaskList
前需要在FreeRTOSConfig.h
文件中打开configUSE_TRACE_FACILITY
和configUSE_TRACE_FACILITY
如使用ESP32、ESP8266,需使能
Enable FreeRTOS trace facility
和Enable FreeRTOS stats formatting functions
make menuconfig
->Component config
->FreeRTOS
->Enable FreeRTOS trace facility
make menuconfig
->Component config
->FreeRTOS
->Enable FreeRTOS trace facility
->Enable FreeRTOS stats formatting functions
通过上面配置,等同于使能 FreeRTOSConfig.h 中如下两个宏:
configUSE_TRACE_FACILITY 和 configUSE_STATS_FORMATTING_FUNCTIONS
#include
#include "sdkconfig.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_system.h"
#include "esp_spi_flash.h"void task1(void *pvParam)
{while (1){printf("task1!\n");vTaskDelay(3000 / portTICK_PERIOD_MS);vTaskDelete(NULL);}
}void task2(void *pvParam)
{while (1){printf("task2!\n");vTaskDelay(3000 / portTICK_PERIOD_MS);vTaskDelete(NULL);}
}void app_main(void)
{xTaskCreate(task1, "task1", 4096, NULL, 1, NULL);xTaskCreate(task2, "task2", 4096, NULL, 1, NULL);static char pcWriteBuffer[512] = {0};vTaskList(pcWriteBuffer);printf("-----------------------------------------");printf("Name State Priority Stack Num\n");printf("%s\n",pcWriteBuffer);
}