显示任务详细信息 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);
}
本文档介绍了如何利用vTaskList函数获取FreeRTOS操作系统的任务详细信息,包括任务状态、优先级和堆栈使用情况,以帮助优化内存管理和解决栈溢出问题。在使用该功能前,需要在FreeRTOSConfig.h中开启特定配置,并在ESP32或ESP8266上启用相关选项。示例代码展示了如何创建任务并调用vTaskList函数打印任务列表。
】显示任务详细信息&spm=1001.2101.3001.5002&articleId=128080703&d=1&t=3&u=cab62d8ad1434f1f89b9d4196038de80)

被折叠的 条评论
为什么被折叠?



