【学习FreeRTOS】第11章——FreeRTOS中任务相关的其他API函数

1.函数总览

序号 函数 描述
1 uxTaskPriorityGet() 获取任务优先级
2 vTaskPrioritySet() 设置任务优先级
3 uxTaskGetNumberOfTasks() 获取系统中任务的数量
4 uxTaskGetSystemState() 获取所有任务的状态信息
5 vTaskGetInfo() 获取单个任务的状态信息
6 xTaskGetCurrentTaskHandle() 获取当前任务的任务句柄
7 xTaskGetHandle() 获取指定任务的任务句柄
8 uxTaskGetStackHighWaterMark() 获取任务的任务栈历史剩余最小值
9 eTaskGetState() 获取任务状态
10 vTaskList() 以"表格"形式获取所有任务的信息
11 vTaskGetRunTimeStats() 获取任务的运行时间等信息
12 xTaskGetApplicationTaskTag() 获取任务Tag
13 vTaskSetApplicationTaskTag() 设置任务Tag
14 pcTaskGetName() 获取任务名
15 xTaskGetSchedulerState() 获取任务调度器状态
16 xTaskGetIdleTaskHandle() 获取空闲任务的任务句柄
17 xTaskGetTickCount() 获取系统时钟节拍计数器的值
18 xTaskGetTickCountFromISR() 中断中获取系统使用节拍计数器的值
19 GetThreadLocalStoragePointer() 获取任务的独有数据记录数组指针
20 setThreadLocalStoragePointer() 设置任务的独有数据记录数组指针

这些API函数主要用于程序调试阶段,查看任务运行状态,以及统计任务时间占比(空
闲任务占比越大,代表应用程序压力越小)

【本文只阐述一些比较重要的API,其他API可以查阅FreeRTOS官网

2.重点函数介绍

2.1获取任务优先级

cpp 复制代码
UBaseType_t  uxTaskPriorityGet(const TaskHandle_t xTask)
  • 此函数用于获取指定任务的任务优先级,使用该函数需将宏 INCLUDE_uxTaskPriorityGet置1
  • 形参:xTask,要查找的任务句柄(NULL代表任务自身)
  • 返回值:整数,任务优先级数值

2.2.设置任务优先级

cpp 复制代码
void vTaskPrioritySet(TaskHandle_t xTask, UBaseType_t uxNewPriority )
  • 此函数用于改变某个任务的任务优先级,使用该函数需将宏 INCLUDE_vTaskPrioritySet置1
  • 形参:xTask,任务句柄(NULL代表任务自身);uxNewPriority,需要设置的任务优先级

2.3.获取系统中任务数量

cpp 复制代码
UBaseType_t uxTaskGetNumberOfTasks(void)
  • 此函数用于获取系统中任务的任务数量
  • 返回值:整型,系统中任务的数量

2.4.获取所有任务的状态信息

cpp 复制代码
UBaseType_t  uxTaskGetSystemState(	TaskStatus_t * const 				pxTaskStatusArray,
                                    const UBaseType_t 					uxArraySize,
                                	configRUN_TIME_COUNTER_TYPE* const 	pulTotalRunTime)
typedef struct xTASK_STATUS
{
    TaskHandle_t 					xHandle;                /* 任务句柄 */ 
    const char *		 			pcTaskName;             /* 任务名 */ 
    UBaseType_t						xTaskNumber;            /* 任务编号 */ 
    eTaskState e					CurrentState;           /* 任务状态 */ 
    UBaseType_t 					uxCurrentPriority;      /* 任务优先级 */ 
    UBaseType_t 					uxBasePriority;         /* 任务原始优先级*/ 
    configRUN_TIME_COUNTER_TYPE 	ulRunTimeCounter; 		/* 任务运行时间*/
    StackType_t * 					pxStackBase;            /* 任务栈基地址 */ 
    configSTACK_DEPTH_TYPE 			usStackHighWaterMark;  	/* 任务栈历史剩余最小值 */ 
} TaskStatus_t;
  • 此函数用于获取系统中所有任务的任务状态信息,使用该函数需将宏configUSE_TRACE_FACILITY置1
  • 形参:xTaskStatusArray,指向TaskStatus_t 结构体数组首地址(一般要自行分配)
  • 形参:uxArraySize,接收信息的数组大小(一般为任务数量)
  • 形参:pulTotalRunTime,系统总运行时间,为NULL 则省略总运行时间值(一般为NULL)
  • 返回值:整型,获取信息的任务数量

2.5.获取单个任务的状态信息

cpp 复制代码
void vTaskGetInfo(	TaskHandle_t 	xTask, 
					TaskStatus_t* 	pxTaskStatus, 	
					BaseType_t 		xGetFreeStackSpace,
					eTaskState 		eState)
typedef enum
{   
	eRunning = 0,	/* 运行态 */ 
	eReady			/* 就绪态 */ 
	eBlocked, 		/* 阻塞态 */ 
	eSuspended, 	/* 挂起态 */ 
	eDeleted, 		/* 任务被删除 */ 
	eInvalid		/* 无效 */ 
} eTaskState;
  • 此函数用于获取指定的单个任务的状态信息,使用该函数需将宏configUSE_TRACE_FACILITY置1
  • 形参:xTask,指定获取信息的任务的句柄
  • 形参:pxTaskStatus,接收任务信息的变量
  • 形参:xGetFreeStackSpace,任务栈历史剩余最小值(当为pdFALSE跳过这个步骤,当为pdTRUE检查历史剩余最小堆栈)
  • 形参:eState,任务状态,可直接赋值,如想获取代入"eInvalid"

2.6.获取当前任务的任务句柄

cpp 复制代码
TaskHandle_t xTaskGetCurrentTaskHandle(void) 
  • 此函数用于获取当前任务的任务句柄,使用该函数需将宏 INCLUDE_xTaskGetCurrentTaskHandle置1
  • 返回值:TaskHandle_t ,当前任务的任务句柄

2.7.获取指定任务的任务句柄

cpp 复制代码
TaskHandle_t xTaskGetHandle(const char* pcNameToQuery); 
  • 此函数用于通过任务名获取任务句柄,使用该函数需将宏 INCLUDE_xTaskGetHandle置1
  • 形参:pcNameToQuery,任务名
  • 返回值:TaskHandle,任务句柄

2.8.获取任务的任务栈历史剩余最小值

cpp 复制代码
UBaseType_t uxTaskGetStackHighWaterMark(TaskHandle_t xTask)
  • 此函数用于获取指定任务的任务栈历史最小剩余堆栈,使用该函数需将宏 INCLUDE_uxTaskGetStackHighWaterMark置1
  • 形参:xTask,任务句柄
  • 返回值:UBaseType_t,任务栈的历史剩余最小值

2.9.获取任务状态

cpp 复制代码
eTaskState    eTaskGetState(TaskHandle_t xTask)
typedef enum
{   
	eRunning = 0,	/* 运行态 */ 
	eReady			/* 就绪态 */ 
	eBlocked, 		/* 阻塞态 */ 
	eSuspended, 	/* 挂起态 */ 
	eDeleted, 		/* 任务被删除 */ 
	eInvalid		/* 无效 */ 
} eTaskState;
  • 此函数用于查询某个任务的运行状态,使用此函数需将宏 INCLUDE_eTaskGetState置1
  • 形参:xTask,待获取状态任务的任务句柄
  • 返回值:eTaskState,任务状态

2.10.以"表格"形式获取所有任务的信息(类似于2.4获取所有任务的状态信息)

cpp 复制代码
void vTaskList(char* pcWriteBuffer)
  • 此函数用于以"表格"的形式获取系统中任务的信息,使用此函数需将宏 configUSE_TRACE_FACILITY、configUSE_STATS_FORMATTING_FUNCTIONS 置1
  • 形参:pcWriteBuffer,接收任务信息的缓存指针

Name: 创建任务的时候给任务分配的名字。

State: 任务的壮态信息,X是运行态,B是阻塞态, R是就绪态,S是挂起态, D是删除态

Priority :任务优先级。

Stack : 任务堆栈的"高水位线",就是堆栈历史最小剩余大小。

Num : 任务编号,这个编号是唯一的,当多个任务使用同一个任务名的时候可以通过此编号来做区分。

2.11.获取任务的运行时间等信息

cpp 复制代码
Void vTaskGetRunTimeStats(char * pcWriteBuffer)
  • 此函数用于统计任务的运行时间信息,使用此函数需将宏 configGENERATE_RUN_TIME_STATS,configUSE_STATS_FORMATTING_FUNCTIONS 置1
  • 形参:pcWriteBuffer,接收任务运行时间信息的缓存指针

Task:任务名称

Abs Time:任务实际运行的总时间(绝对时间)

% Time:占总处理时间的百分比

时间统计API函数使用流程:

  1. 将宏 configGENERATE_RUN_TIME_STATS 置1
  2. 将宏 configUSE_STATS_FORMATTING_FUNCTIONS 置1
  3. 当将此宏 configGENERATE_RUN_TIME_STATS 置1之后,还需要实现2个宏定义:
    ① portCONFIGURE_TIMER_FOR_RUNTIME_STATE() :用于初始化用于配置任务运行时间统计的时基定时器(该函数一般调用时基定时器的初始化,配置时间精度,这个时基定时器的计时精度需高于系统时钟节拍精度的10至100倍!)
    ② portGET_RUN_TIME_COUNTER_VALUE():用于获取该功能时基硬件定时器计数的计数值(一般在时基函数初始化时置0,在定时器中断中自增)
相关推荐
一尘之中4 小时前
从C语言底层设计到系统架构评估:软件架构知识体系全景
学习·系统架构·ai写作
sheeta19985 小时前
LeetCode 每日一题笔记 日期:2026.05.29 题目:3300. 最小元素
笔记·leetcode
czy87874756 小时前
vscode编译make命令要修改stm32cubemx生成的STM32F103XX_FLASH.ld文件
ide·vscode·stm32
中屹指纹浏览器6 小时前
2026指纹浏览器代理链路适配原理与多线路集群调度方案
经验分享·笔记
星夜夏空996 小时前
FreeRTOS学习(4)——内存映射
数据库·学习·mongodb
不羁的木木6 小时前
ArkWeb实战学习笔记05-综合实战:构建混合应用
笔记·学习·harmonyos
橙橙笔记6 小时前
Python的学习第一部分
python·学习
bush46 小时前
嵌入式linux学习记录二
linux·运维·学习
CC大煊7 小时前
一个Javaer的AI转型笔记(1):入坑LangChain,我的第一个hello world
笔记·langchain
三易串口屏7 小时前
实验20 自动灭火场景实验
嵌入式硬件·串口屏·三易串口屏·uart 通信