Freertos学习05-Task状态打印

发布时间 2023-06-26 23:44:29作者: seekwhale13

一、前言

  TaskList()是FreeRTOS中的一个函数,它可以列出所有当前正在运行的任务。这个函数可以用于调试和监视系统中的任务。它返回一个指向任务列表的指针,其中包含每个任务的名称、状态、优先级和堆栈使用情况等信息。

二、函数介绍

  该函数的输入参数为数据缓存区的地址,可输出格式化的数据:
Name -任务名字

State -任务状态

“X”表示任务正在运行executing
“B”表示任务处于堵塞态
“R”表示任务处于就绪态
“S”表示任务被挂起
“D”表示任务已经被删除
Priority -任务优先度

Stack -任务剩余可用堆栈大小,越接近零,任务就越接近溢出堆栈

Num -任务的唯一数字编号
image

三、示例测试

#include <stdio.h>
#include "sdkconfig.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_system.h"
#include "driver/gpio.h"

#define LED1_IO 12
#define LED1_IO_PIN (1ULL << 12)

void blinke_slow(void *pvparam)
{
	while (1)
	{
		gpio_set_level(LED1_IO, 1); // 高低电平
		printf("靓仔\n");
		vTaskDelay(1000 / portTICK_PERIOD_MS); // 延时
		gpio_set_level(LED1_IO, 0);			   // 高低电平
		vTaskDelay(1000 / portTICK_PERIOD_MS); // 延时
	}
}

void blinke_fast(void *pvparam)
{
	while (1)
	{
		gpio_set_level(LED1_IO, 1); // 高低电平
		printf("叼毛\n");
		vTaskDelay(1000 / portTICK_PERIOD_MS); // 延时
		gpio_set_level(LED1_IO, 0);			   // 高低电平
		vTaskDelay(1000 / portTICK_PERIOD_MS); // 延时
		vTaskSuspend(NULL);					   // 挂起函数
	}
}

void app_main(void)
{
	gpio_config_t LED_cof;
	// 设置配置IO为12
	LED_cof.pin_bit_mask = LED1_IO_PIN;
	// 设置为输出模式
	LED_cof.mode = GPIO_MODE_OUTPUT;
	// 禁止上拉
	LED_cof.pull_up_en = 0;
	// 禁止下拉
	LED_cof.pull_down_en = 0;
	// 禁用中断
	LED_cof.intr_type = 0;
	// 将配置写入
	gpio_config(&LED_cof);

	TaskHandle_t xHandle = NULL;
	xTaskCreate(blinke_slow, "mytask1", 4096, NULL, 1, &xHandle);
	xTaskCreate(blinke_fast, "mytask2", 4096, NULL, 1, NULL);

	static char pcWriteBuffer[512] = {0};
	vTaskList(pcWriteBuffer);
	printf("-----------------------------------\n");
	printf("name          state  priority  stack   num\n");
	printf("%s\n", pcWriteBuffer);
}

测试结果:
image

THE END!