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

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.mzph.cn/news/42671.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Excel自动化办公——Openpyxl的基本使用

Excel自动化办公——Openpyxl的基本使用 个人感觉,相比Pandas,openpyxl对Excel的操作更为细致,Pandas则更适用于统计计算; 01 基本环境02 Excel数据读取操作03 案例04 向Excel写入数据05 表数据定向修改06 单元格样式制定07 单元…

原型对象的简单了解

在前面学习java有一个概念叫做继承,方便我们对父类方法、变量等的调用。对前端的学习我们需要让对象可以访问和继承其他对象的属性和方法,就需要了解原型对象,以及原型链。 一、原型 构造函数通过原型分配的函数是所有对象所共享的。每一个构…

【Lua语法】算术、条件、逻辑、位、三目运算符

1.算术运算符 加减乘除取余: - * / % Lua中独有的:幂运算 ^ 注意: 1.Lua中没有自增自减(、–),也没有复合运算符(、-) 2.Lua中字符串可以进行算术运算符操作,会自动转成number 如:“10.3” 1 结果为11.3…

回归预测 | MATLAB实现SOM-BP自组织映射结合BP神经网络多输入单输出回归预测(多指标,多图)

回归预测 | MATLAB实现SOM-BP自组织映射结合BP神经网络多输入单输出回归预测(多指标,多图) 目录 回归预测 | MATLAB实现SOM-BP自组织映射结合BP神经网络多输入单输出回归预测(多指标,多图)效果一览基本介绍…

【css动画】向下的动态箭头

前言 使用css实现一组向下的动态箭头效果&#xff0c;如下图 思路 1.使用svg画箭头 2.设置keyframes&#xff0c;主要是每个箭头加不同的延时。 代码 <div class"down-arrow"><svg id"more-arrows"><polygonclass"arrow-top&quo…

Spark第三课

1.分区规则 1.分区规则 shuffle 1.打乱顺序 2.重新组合 1.分区的规则 默认与MapReduce的规则一致,都是按照哈希值取余进行分配. 一个分区可以多个组,一个组的数据必须一个分区 2. 分组的分区导致数据倾斜怎么解决? 扩容 让分区变多修改分区规则 3.HashMap扩容为什么必须…

[JavaWeb]【七】web后端开发-MYSQL

前言&#xff1a;MySQL是一种流行的关系型数据库管理系统,它的作用是存储和管理数据。在Web开发中,MySQL是必备的数据库技能之一,因为它可以帮助Web开发人员处理大量的数据,并且提供了强大的数据查询和管理功能。 一 数据库介绍 1.1 什么是数据库 1.2 数据库产品 二 MySQL概述…

Servlet+JDBC实战开发书店项目讲解第六篇:订单实现

ServletJDBC实战开发书店项目讲解第六篇&#xff1a;订单实现 1. 数据库设计 在订单实现之前&#xff0c;我们需要对数据库进行相应的设计。在这个书店项目中&#xff0c;我们可以创建以下两个表来实现订单功能&#xff1a; 1.1 订单表(Order) 订单ID(order_id)&#xff1a…

vue3 实现简单瀑布流

一、整理思路 实际场景中&#xff0c;瀑布流一般由 父组件 提供 数据列表&#xff0c;子组件渲染每个图片都是根据容器进行 绝对定位 &#xff0c;从而定好自己的位置取出 屏幕的宽度&#xff0c;设定 图片的宽度 固定 为一个值&#xff0c;计算可以铺 多少列按列数 先铺上第一…

使用Julia进行核递归最小二乘算法(KRLS)的解析与实现

F 标题&#xff1a; 使用Julia进行核递归最小二乘算法&#xff08;KRLS&#xff09;的深度解析与实现 第一部分&#xff1a; 核递归最小二乘算法 (KRLS) 是一个在线核回归算法&#xff0c;这种算法的主要特点是能够一次处理一个样本&#xff0c;并构建一个训练点字典&#xf…

5G科技防汛,助力守护一方平安

“立秋虽已至&#xff0c;炎夏尚还在”&#xff0c;受台风席卷以及季节性影响全国多地正面临强降水的严峻挑战。“落雨又顺秋&#xff0c;绵绵雨不休”&#xff0c;正值“七下八上” 防汛关键时期&#xff0c;贵州省水文水资源局已全面进入备战状态。 为确保及时响应做好防汛抢…

Vue3 setup新特性简单应用

去官网学习→组合式 API&#xff1a;setup() | Vue.js 运行示例&#xff1a; 代码&#xff1a;App.vue <template><div class"home"><img alt"Vue logo" src"../assets/logo.png"><!-- msg 组件传递数据 --><Hell…

VBA_MF系列技术资料1-157

MF系列VBA技术资料 为了让广大学员在VBA编程中有切实可行的思路及有效的提高自己的编程技巧&#xff0c;我参考大量的资料&#xff0c;并结合自己的经验总结了这份MF系列VBA技术综合资料&#xff0c;而且开放源码&#xff08;MF04除外&#xff09;&#xff0c;其中MF01-04属于定…

MySQL 面试题

一、数据库基础 1、MySQL 有哪些数据库类型? (1) 整数类型&#xff1a; TINYINT 1 字节 SMALLINT 2 字节 MEDIUMINT 3 字节 INT 4 字节 BIGINT 8 字节 ① 任何整数类型都可以加上 UNSIGNED …

【学会动态规划】最长湍流子数组(23)

目录 动态规划怎么学&#xff1f; 1. 题目解析 2. 算法原理 1. 状态表示 2. 状态转移方程 3. 初始化 4. 填表顺序 5. 返回值 3. 代码编写 写在最后&#xff1a; 动态规划怎么学&#xff1f; 学习一个算法没有捷径&#xff0c;更何况是学习动态规划&#xff0c; 跟我…

vue+elementui 实现文本超出长度显示省略号,鼠标移上悬浮展示全部内容

一、场景 表单内的输入框一般为固定宽度&#xff0c;当输入框内容长度超出输入框宽度时&#xff0c;需要显示省略号&#xff0c;并设置鼠标移到输入框上时悬浮展示全部内容。 <el-tooltipplacement"top-start"effect"light":content"basicData[Or…

在 IDEA 中使用 Git开发 图文教程

在 IDEA 中使用 Git开发 图文教程 一、连接远程仓库二、IDEA利用Git进行开发操作三、分支操作3.1 新建分支3.2 切换分支3.3 删除分支3.4 比较分支3.5 合并分支 四、常用快捷键 一、连接远程仓库 一、打开IDEA&#xff0c;进入目录&#xff1a;File ->New ->Project from…

Skywalking全链路追踪【学习笔记】

Skywalking全链路追踪的服务搭建&#xff0c;使用docker进行安装。 搭建服务 搭建【ES】 # 拉取 docker pull docker.elastic.co/elasticsearch/elasticsearch:7.17.10 # 启动 docker run -p 127.0.0.1:9200:9200 -p 127.0.0.1:9300:9300 -e "discovery.typesingle-nod…

什么是 SPI,和API有什么区别?

面试回答 Java 中区分 API 和 SPI&#xff0c;通俗的讲&#xff1a;API 和 SPI 都是相对的概念&#xff0c;他们的差别只在语义上&#xff0c;API 直接被应用开发人员使用&#xff0c;SPI 被框架扩展人员使用。 API Application Programming Interface 大多数情况下&#xff…

opencv 矩阵运算

1.矩阵乘&#xff08;*&#xff09; Mat mat1 Mat::ones(2,3,CV_32FC1);Mat mat2 Mat::ones(3,2,CV_32FC1);Mat mat3 mat1 * mat2; //矩阵乘 结果 2.元素乘法或者除法&#xff08;mul&#xff09; Mat m Mat::ones(2, 3, CV_32FC1);m.at<float>(0, 1) 3;m.at…