版权声明:本文为博主原创文章,可以随意引用或转载,但未经博主允许不得用于任何商业用途。 https://blog.csdn.net/ustccw/article/details/84136257
vTaskList 使用
vTaskList 是 freeRTOS 提供的接口, 可用来查看每个 task 信息, ESP8266 上测试程序如下:
注意:
编译前需使能 FreeRTOSConfig.h 中下面两个宏:
#define configUSE_TRACE_FACILITY 1
#define configUSE_STATS_FORMATTING_FUNCTIONS 1
测试代码如下:
static void test_task(void *pvParameter)
{
char* p = (char*)malloc(512);
uint8_t s[128];
memcpy(s, p, 128);
while(1){
vTaskDelay(100);
}
}
void test_app()
{
xTaskCreate(&test_task, "test_task1", 1024, NULL, 8, NULL);
xTaskCreate(&test_task, "test_task2", 2048, NULL, 7, NULL);
xTaskCreate(&test_task, "test_task3", 4096, NULL, 6, NULL);
xTaskCreate(&test_task, "test_task4", 8192, NULL, 5, NULL);
vTaskDelay(300);
char* pbuffer = (char*) malloc(2048);
memset(pbuffer, 0x0, 2048);
printf("----------------------------------------------\r\n");
vTaskList(pbuffer);
printf("%s", pbuffer);
printf("----------------------------------------------\r\n");
free(pbuffer);
while(1){
vTaskDelay(100);
}
}
vTaskList 执行结果
如上.
- 第一列表示 task name, 即
xTaskCreate
传递进去的第二个参数, 如果名称过长, 会根据configMAX_TASK_NAME_LEN
截断 - 第二列表示 task 当前执行状态
X
: runningB
: blockedR
: readyD
: deletedS
: suspended
详细参考task.c
中
- 第三列表示 task 优先级, 即
xTaskCreate
传递进去的第四个参数 - 第四列表示该 task 运行过程中, 最小时候还剩余多少内存, 字节为单位.
如果剩余内存较多, 修改xTaskCreate
第三个参数, 即可节省内存 - 第五列表示 task 创建顺序
后注
如想要打印更多 task 信息, 如 task 运行时间, task 句柄, task 地址相关, 可在 vTaskList
实现中, 打印 TaskStatus_t
结构体中更多 task 属性.