【FreeRTOS(四)】显示任务详细信息

  • Post author:
  • Post category:其他




显示任务详细信息 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 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 <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);
}



版权声明:本文为K3169原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。