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

news/2024/12/1 0:44:16/

1.函数总览

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

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

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

2.重点函数介绍

2.1获取任务优先级

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

2.2.设置任务优先级

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

2.3.获取系统中任务数量

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

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

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.获取单个任务的状态信息

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.获取当前任务的任务句柄

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

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

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

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

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

2.9.获取任务状态

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

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

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.获取任务的运行时间等信息

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,在定时器中断中自增)

http://www.ppmy.cn/news/1054650.html

相关文章

基于LSTM深度学习网络的时间序列分析matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 % 随机打乱数据集并划分训练集和测试集 index_list randperm(size(wdata, 1)); ind …

LeetCode 786. 第 K 个最小的素数分数

&#x1f517; 原题链接&#xff1a;786. 第 K 个最小的素数分数 本题可以暴力求解&#xff1a; class Solution { public:vector<int> kthSmallestPrimeFraction(vector<int>& arr, int k) {int n arr.size();vector<pair<int, int>> frac;for …

flutter TARGET_SDK_VERSION和android 13

config.gradle ext{SDK_VERSION 33MIN_SDK_VERSION 23TARGET_SDK_VERSION 33COMPILE_SDK_VERSION SDK_VERSIONBUILD_TOOL_VERSION "33.0.0"//兼容库版本SUPPORT_LIB_VERSION "33.0.0"}app/build.gradle里面的 defaultConfig {// TODO: Specify your…

云服务器和虚拟主机区别

虚拟主机和云服务器是常见的网站托管方式&#xff0c;都可以让网站在互联网上运行&#xff0c;但是它们有很大的区别。本文将从使用场景、性能、安全性、灵活性、价格等方面详细介绍虚拟主机和云服务器的区别。 一、使用场景 虚拟主机是一个物理服务器通过虚拟化技术划分成多…

配置NTP时间服务器

1.配置ntp时间服务器&#xff0c;确保客户端主机能和服务主机同步时间 ​ 客户端主机 同步成功 2.配置ssh免密登陆&#xff0c;能够通过客户端主机通过redhat用户和服务端主机基于公钥验证方式进行远程连接

攻防世界-Web_php_include

原题 解题思路 php://被替换了&#xff0c;但是只做了一次比对&#xff0c;改大小写就可以绕过。 用burp抓包&#xff0c;看看有哪些文件 flag明显在第一个PHP文件里&#xff0c;直接看

高等数学:线性代数-第二章

文章目录 第2章 矩阵及其运算2.1 线性方程组和矩阵2.2 矩阵的运算2.3 逆矩阵2.4 Cramer法则 第2章 矩阵及其运算 2.1 线性方程组和矩阵 n \bm{n} n 元线性方程组 设有 n 个未知数 m 个方程的线性方程组 { a 11 x 1 a 12 x 2 ⋯ a 1 n x n b 1 a 21 x 1 a 22 x 2 ⋯ a …

机器学习基础之《分类算法(4)—案例:预测facebook签到位置》

一、背景 1、说明 2、数据集 row_id&#xff1a;签到行为的编码 x y&#xff1a;坐标系&#xff0c;人所在的位置 accuracy&#xff1a;定位的准确率 time&#xff1a;时间戳 place_id&#xff1a;预测用户将要签到的位置 3、数据集下载 https://www.kaggle.com/navoshta/gr…