通过
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 facilitymake 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);
}