07 FreeRTOS - 常用调试函数(三) vTaskList()

7.1 vTaskList函数原型

c 复制代码
/*********************************************************************************
* 函数名:   vTaskList
* 功能:     查看任务信息
* 输入:     pcWriteBuffer[任务信息存放的地址]
* 输出:    无
*********************************************************************************/ 
void vTaskList( char * pcWriteBuffer )

7.2 应用:

c 复制代码
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "timer.h"
#include "string.h"
#include "FreeRTOS.h"
#include "task.h"


#define TASK1_TASK_PRIO        2  //任务优先级
#define TASK1_STK_SIZE         128  //任务堆栈大小
TaskHandle_t Task1Task_Handler; //任务句柄
void task1_task(void *pvParameters);//任务函数


#define TASK2_TASK_PRIO        3
#define TASK2_STK_SIZE         256  
TaskHandle_t Task2Task_Handler;
void task2_task(void *pvParameters);

#define RUNTIMESTATS_TASK_PRIO    4
#define RUNTIMESTATS_STK_SIZE     128  
TaskHandle_t RunTimeStats_Handler;
void RunTimeStats_task(void *pvParameters);


int main(void)
{ 
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);//设置系统中断优先级分组4
    delay_init(168);                    //初始化延时函数
    uart_init(38400);                     //初始化串口
    

    //创建TASK1任务
    xTaskCreate((TaskFunction_t )task1_task,             
                (const char*    )"task1_task",           
                (uint16_t       )TASK1_STK_SIZE,        
                (void*          )NULL,                  
                (UBaseType_t    )TASK1_TASK_PRIO,        
                (TaskHandle_t*  )&Task1Task_Handler);   
    //创建TASK2任务
    xTaskCreate((TaskFunction_t )task2_task,     
                (const char*    )"task2_task",   
                (uint16_t       )TASK2_STK_SIZE,
                (void*          )NULL,
                (UBaseType_t    )TASK2_TASK_PRIO,
                (TaskHandle_t*  )&Task2Task_Handler); 
                
    //创建RunTimeStats任务
    xTaskCreate((TaskFunction_t )RunTimeStats_task,     
                (const char*    )"RunTimeStats_task",   
                (uint16_t       )RUNTIMESTATS_STK_SIZE,
                (void*          )NULL,
                (UBaseType_t    )RUNTIMESTATS_TASK_PRIO,
                (TaskHandle_t*  )&RunTimeStats_Handler);
    vTaskStartScheduler();          //开启任务调度
}


//task1任务函数
void task1_task(void *pvParameters)
{
    u32 task1_num=0;
    while(1)
    {
        task1_num++;
        while(task1_num<5000)
        {
            task1_num++;
        }
        vTaskDelay(4);    
    }
}

//task2任务函数
void task2_task(void *pvParameters)
{
    u32 task2_num=0;
    while(1)
    {
        task2_num++;
        while(task2_num<999999)
        {
            task2_num++;
            task2_num = task2_num * 2;
            task2_num = task2_num / 2;
        }
        vTaskDelay(10);
    }
}

//RunTimeStats任务
void RunTimeStats_task(void *pvParameters)
{
    char InfoBuffer[1024];
    vTaskDelay(10);
    vTaskList(InfoBuffer);                            //获取所有任务的信息
    printf("%s\r\n",InfoBuffer);                    //通过串口打印所有任务的信息

    while(1)
    {
        vTaskDelay(1000);
    }
}

输出结果:(依次是 任务名称, 运行状态,任务优先级,剩余堆栈大小,任务编号)

RunTimeStats_task R 4 117 3

task2_task R 3 118 2

task1_task R 2 117 1

IDLE R 0 119 4

Tmr Svc S 31 235 5

备注:

开始时输出结果如下,任务2堆栈太小了(128),导致的剩余堆栈为0,并且把任务1的名称丢了,增大为256正常了。

RunTimeStats_task R 4 117 3

task2_task R 3 0 2

R 2 117 1

IDLE R 0 119 4

Tmr Svc S 31 235 5

相关推荐
FreakStudio5 天前
W55MH32L-EVB 上手测评:硬件 TCP/IP 加持的以太网单片机,MicroPython 零门槛开发
python·单片机·嵌入式·大学生·面向对象·并行计算·电子diy·电子计算机
✎ ﹏梦醒͜ღ҉繁华落℘10 天前
单片机基础知识---stm32单片机的优先级
stm32·单片机·mongodb
u1521096484910 天前
S.S.Audio PRO A2音频隔离器
嵌入式硬件·音视频·实时音视频·视频编解码·视频
zd84510150010 天前
RS485 总线详解
单片机·嵌入式硬件
半条-咸鱼10 天前
【STM32】I2C协议原理、HAL读写与OLED显示操作
嵌入式硬件·c·信息与通信
wohoo_wangzi10 天前
苏州晟雅泰电子:关于W25Q128JVSIQ这个芯片物料的参数,规格及应用领域
嵌入式硬件
✎ ﹏梦醒͜ღ҉繁华落℘10 天前
编程基础 --高内聚,低耦合
c语言·单片机
科芯创展10 天前
1A,1MHz,30VIN,XZ4115,降压恒流LED驱动芯片
单片机·嵌入式硬件
集芯微电科技有限公司11 天前
四通道2A输出集成功率电感降压模块专为紧凑型方案设计
人工智能·单片机·嵌入式硬件·生成对抗网络·计算机外设
踏着七彩祥云的小丑11 天前
嵌入式测试学习第 37 天:异常场景测试:断电、拔插、干扰、非法指令
单片机·嵌入式硬件·学习