文章目录
- 显示任务详细信息 vTaskList
- 代码示例
显示任务详细信息 vTaskList
通过
vTaskList来协助分析操作系统当前 task 状态,以帮助优化内存,帮助定位栈溢出问题。
void vTaskList( char *pcWriteBuffer );
| parameter | description |
|---|---|
| pcWriteBuffer | 保存任务状态信息表的存储区,须足够大 |
| return | 空 |
pcWriteBuffe表中信息
- Name:创建任务的时候给任务分配的名字
- State:任务的状态信息,X:运行态,B:阻塞态,R:就绪态,S:挂起态,D:删除态
- Priority:任务优先级
- Stack:任务堆栈的“高水位线”,就是堆栈历史最小剩余值
- Num:任务编号,这个编号是唯一的;当多个任务使用同一个任务名的时候;可以通过编号来区分

注意事项:
在使用
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 <stdio.h>
#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);
}












![[附源码]Python计算机毕业设计Django的党务管理系统](https://img-blog.csdnimg.cn/20535bb230d0492c81b6a981b156261d.png)

![[附源码]计算机毕业设计springboot高校车辆管理系统](https://img-blog.csdnimg.cn/99ac5fca751a4786a2f9a4d8845c1211.png)




