首页 > 其他分享 >Freertos学习05-Task状态打印

Freertos学习05-Task状态打印

时间:2023-06-26 23:46:08浏览次数:40  
标签:Task 函数 Freertos 05 FreeRTOS 任务 堆栈 freertos include

一、前言

  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!

标签:Task,函数,Freertos,05,FreeRTOS,任务,堆栈,freertos,include
From: https://www.cnblogs.com/seekwhale13/p/17507475.html

相关文章

  • Freertos学习03-Task状态
    一、前言FreeRTOS是一个流行的实时操作系统,它支持多任务处理。在FreeRTOS中,任务有不同的状态,这些状态反映了任务在系统中的行为。二、状态特点任务可以存在于以下状态中:运行当任务实际执行时,它被称为处于运行状态。任务当前正在使用处理器。如果运行RTOS的处理器只......
  • 线程上运行 task
    我没能实现始终在一个线程上运行task 前文我们总结了在使用常驻任务实现常驻线程时,应该注意的事项。但是我们最终没有提到如何在处理对于带有异步代码的办法。本篇将接受笔者对于该内容的总结。如何识别当前代码跑在什么线程上一切开始之前,我们先来使用一种简单的方式来识......
  • Freertos学习03-Task优先级
    一、前言FreeRTOS是一个流行的实时操作系统,它允许用户创建多个任务并在它们之间共享处理器时间。在FreeRTOS中,任务的优先级别是非常重要的,因为它决定了任务在系统中的执行顺序。二、任务优先级特点FreeRTOS中的任务优先级别是一个整数,范围从0到configMAX_PRIORITIES-1,其......
  • 2000-2050的闰年(函数)
    #include<stdio.h>is_leap_year(inty){ if((y%4==0&&y%100!=0)||(y%400==0)) return1; else return0;}intmain(){ intyear=0; printf("2000-2050闰年:"); for(year=2000;year<=2050;year++) { i......
  • TVS二极管DW05-4R3P-S 保护GPIO端口免受ESD静电威胁
    General-purposeInputOutput,中文:通用输入/输出端口,简称GPIO或总线扩展器。GPIO端口能够提供额外的控制和监视功能,每个GPIO端口可通过软件分别配置成输入或输出,由于其可能需要引线至外部传输数据,极其容易受到ESD静电放电及其他电磁脉冲浪涌的影响,为产品的稳定性和可靠性带来挑战......
  • vue05_路由
    今日目标1.能够说出什么是路由2.能够说出前端路由的实现原理3.能够使用Vue-Router实现前端路由4.能够实现嵌套路由,动态路由5.能够实现命名路由以及编程式导航6.理解并实现后台管理案例 1.路由的概念路由的本质就是一种对应关系,比如说我们在url地址中输入我们要访问的......
  • 迅为2K0500开发板龙芯全国产平台工业控制人机界面解决方案
       触摸屏控制器:龙芯2K0500可以作为触摸屏控制器的核心处理器,用于接收触摸输入信号,并进行实时的触摸事件处理和解析。它可以支持多点触控、手势识别等高级触摸功能,为用户提供直观、交互式的操作体验。图形界面显示:龙芯2K0500具备强大的图形处理能力,可以用于实时渲染和显示......
  • Freertos学习02-Task传入参数
    一、前言介绍了freertos具有许多特点,其中的任务调度将有助提高系统的实时性,并将各任务解耦,有助于产品的后续维护与开发,上一节介绍了freertos中关于任务的创建与删除,这一节介绍如何在创建函数的同时并传递参数。二、传递参数再次回顾xTaskCreate()函数的用法以及各输入参数,其中......
  • embos vs freertos
    embOS和FreeRTOS都是实时操作系统(RTOS),它们用于嵌入式系统开发。这两个系统都提供了用于管理任务、时间和资源的功能,以便在有限的硬件资源下实现实时性能。embOS是由SEGGER公司开发的专有软件,它提供了用于多种微控制器和微处理器的版本。FreeRTOS是一个开源的实时操作系统......
  • Redfish是一种现代、开放且标准化的远程管理和监控接口,由DMTF(Distributed Management
    Redfish是一种现代、开放且标准化的远程管理和监控接口,由DMTF(DistributedManagementTaskForce)开发和维护。它基于RESTfulAPI设计,使用JSON或OData格式进行数据交换。Redfish旨在提供简化、灵活和可互操作的远程管理解决方案,取代或与传统的远程管理技术(如IPMI)配合使用。Redfish......