十二、FreeRTOS之FreeRTOS任务相关API函数

news2025/6/8 5:47:36

本节需要掌握以下内容:

1FreeRTOS任务相关API函数介绍(熟悉)

2,任务状态查询API函数实验(掌握)

3,任务时间统计API函数实验(掌握)

4,课堂总结(掌握)

一、FreeRTOS任务相关API函数介绍(熟悉)

函数

描述

uxTaskPriorityGet()

获取任务优先级

vTaskPrioritySet()

设置任务优先级

uxTaskGetNumberOfTasks()

获取系统中任务的数量

uxTaskGetSystemState()

获取所有任务状态信息

vTaskGetInfo()

获取指定单个的任务信息

xTaskGetCurrentTaskHandle()

获取当前任务的任务句柄

xTaskGetHandle()

根据任务名获取该任务的任务句柄

uxTaskGetStackHighWaterMark()

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

eTaskGetState()

获取任务状态

vTaskList()

以“表格”形式获取所有任务的信息

vTaskGetRunTimeStats()

获取任务的运行时间

学习资料可参考手册FreeRTOS开发指南11——FreeRTOS其他任务API函数”

 1.1 获取任务优先级函数

UBaseType_t  uxTaskPriorityGet(  const TaskHandle_t xTask  )

此函数用于获取指定任务的任务优先级,使用该函数需将宏 INCLUDE_uxTaskPriorityGet  

形参

描述

       xTask

要查找的任务句柄,NULL代表任务自身

返回值

描述

整数

任务优先级数值

 1.2 设置任务优先级函数

void vTaskPrioritySet( TaskHandle_t xTask , UBaseType_t uxNewPriority )

此函数用于改变某个任务的任务优先级,使用该函数需将宏 INCLUDE_vTaskPrioritySet  1

形参

描述

                     xTask

任务句柄,NULL代表任务自身

uxNewPriority

需要设置的任务优先级

 1.3 获取系统中任务的数量函数

UBaseType_t uxTaskGetNumberOfTasks( void )

此函数用于获取系统中任务的任务数量

返回值

描述

                      整型

系统中任务的数量         

 

1.4 获取所有任务状态信息

UBaseType_t  uxTaskGetSystemState(   TaskStatus_t * const pxTaskStatusArray,

                            const UBaseType_t uxArraySize,

                            configRUN_TIME_COUNTER_TYPE * const pulTotalRunTime  )

 此函数用于获取系统中所有任务的任务状态信息,使用该函数需将宏 configUSE_TRACE_FACILITY 1

形参

描述

xTaskStatusArray

指向TaskStatus_t 结构体数组首地址

uxArraySize

接收信息的数组大小

pulTotalRunTime

系统总运行时间,为NULL 则省略总运行时间值

返回值

描述

             整型

获取信息的任务数量

 TaskStatus_t 类型定义如下:

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;

 1.5 获取指定单个的任务信息

void vTaskGetInfo(   TaskHandle_t   xTask,
                                 
TaskStatus_t *   pxTaskStatus,
                                 
BaseType_t   xGetFreeStackSpace,
                                 
eTaskState   eState  ) 

此函数用于获取指定的单个任务的状态信息,使用该函数需将宏 configUSE_TRACE_FACILITY  1

形参

描述

xTask

指定获取信息的任务的句柄

pxTaskStatus

接收任务信息的变量

xGetFreeStackSpace

任务栈历史剩余最小值,

当为“pdFALSE 则跳过这个步骤,

当为“pdTRUE”则检查历史剩余最小堆栈

eState

任务状态,可直接赋值,如想获取代入“eInvalid

eTaskState类型定义如下

1.6 获取当前任务的任务句柄

TaskHandle_t    xTaskGetCurrentTaskHandle( void )

返回值

描述

                      TaskHandle_t

当前任务的任务句柄

TaskHandle_t xTaskGetHandle(const char * pcNameToQuery);

1.7 根据任务名获取该任务的任务句柄

TaskHandle_t xTaskGetHandle(const char * pcNameToQuery)

此函数用于通过任务名获取任务句柄 , 使用该函数需将宏 INCLUDE_xTaskGetHandle 1

形参

描述

pcNameToQuery

                                             任务名

返回值

描述

    TaskHandle

                                 任务句柄

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

UBaseType_t    uxTaskGetStackHighWaterMark( TaskHandle_t  xTask )

此函数用于获取指定任务的任务栈历史最小剩余堆栈;

使用该函数需将宏 INCLUDE_uxTaskGetStackHighWaterMark 1

形参

描述

              xTask

                       任务句柄

返回值

描述

    UBaseType_t

                  任务栈的历史剩余最小值

1.9 获取任务状态

eTaskState    eTaskGetState(TaskHandle_t xTask)

此函数用于查询某个任务的运行状态,使用此函数需将宏 INCLUDE_eTaskGetState 1

形参

描述

              xTask

        待获取状态任务的任务句柄

返回值

描述

     eTaskState

                                任务状态

1.10 以“表格”形式获取所有任务的信息

 void   vTaskList(char * pcWriteBuffer)

此函数用于以“表格”的形式获取系统中任务的信息 ;

使用此函数需将宏 configUSE_TRACE_FACILITY configUSE_STATS_FORMATTING_FUNCTIONS 1

形参

描述

        pcWriteBuffer

        接收任务信息的缓存指针

表格如下所示:

 1.11  Void    vTaskGetRunTimeStats( char * pcWriteBuffer )

此函数用于统计任务的运行时间信息,使用此函数需将宏 configGENERATE_RUN_TIME_STAT configUSE_STATS_FORMATTING_FUNCTIONS 1

形参

描述

       pcWriteBuffer

             接收任务运行时间信息的缓存指针

 Task:任务名称

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

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

 ,任务状态查询API函数实验(掌握)

三,任务时间统计API函数实验(掌握)

3.1、实验目的:

学习 FreeRTOS 任务运行时间统计相关 API 函数的使用

3.2、实验设计:

将设计三个任务:start_tasktask1task2

三个任务的功能如下:

  • start_task:用来创建task1task2任务
  • task1:LED0500ms闪烁一次,提示程序正在运行
  • task2:用于展示任务运行时间统计相关API函数的使用

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

1、将宏 configGENERATE_RUN_TIME_STATS 1

2、将宏 configUSE_STATS_FORMATTING_FUNCTIONS  1

3、当将此宏 configGENERATE_RUN_TIME_STAT  1之后,还需要实现2个宏定义:

portCONFIGURE_TIMER_FOR_RUNTIME_STATE() :用于初始化用于配置任务运行时间统计的时基定时器;

注意:这个时基定时器的计时精度需高于系统时钟节拍精度的10100

portGET_RUN_TIME_COUNTER_VALUE():用于获取该功能时基硬件定时器计数的计数值 。

3.4 实验代码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1285931.html

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

相关文章

视频分割方法:视频批量剪辑技巧,精准至秒高效分割

在视频编辑过程中,视频分割是一项基础但重要的步骤。对于许多初学者或非专业人士来说,视频分割可能是一项挑战。然而,随着技术的发展,现在有许多工具可以快速高效地进行视频分割。本文讲解云炫AI智剪如何一键分割视频,…

记住5个关键点,避免被身边人传染成胖子

在现代社会,肥胖已经成为一个全球性的疑难杂症。 越来越多的人为了减去身上的赘肉采取各种各样、五花八门的方法,但却发现收效甚微,总是抵挡不住各种各样的引诱,美食、游戏、聚餐、追剧,美食吃不到睡都睡不好&#xf…

【Unity动画】状态机中层的融合原理与用法详解

1. 状态机概念介绍 在Unity中,动画状态机(Animator State Machine)是一种强大的工具,用于控制游戏对象的动画行为。动画状态机由多个动画状态Animation和过渡条件Transition、层组成!而层(Layers&#xff…

抖音本地生活服务商申请入口在哪里?具体流程是怎样的?

不论是抖音的本地生活业务,还是后来的支付宝、视频号的本地生活业务,因为市场体量足够庞大,市场前景广阔,一直很受各大创业者的追捧。那么,如此火热的本地生活项目,想要申请成为服务商,具体的申…

五个轻量级免费 PDF 阅读器

便携式文档格式 (PDF) 是商业中最常用的文档类型之一。它们不仅是创建精心设计的文档的更通用的解决方案,而且还具有交互性和安全性。因此,对于寻求具有专业外观的文档的企业来说,PDF 是理所当然的选择。 当谈到查看这些文档时,大…

高等职业学校新媒体营销实训室解决方案

背景 随着数字化时代的来临,新媒体营销成为企业推广和品牌建设的关键手段。为了培养高职学生在新媒体领域的实际操作能力,建立一套全面、系统的实训室方案至关重要。 目标 搭建高职新媒体营销实训室,旨在培养学生的实际操作能力&#xff0…

微机原理11

一、单项选择题(本大题共15小题,每小题3分,共45分。在每小题给出的四个备选项中,选出一个正确的答案,请将选定的答案填涂在答题纸的相应位置上。) CPU 的数据总线提供() A.数据信号流 B. 地址信号流 C.来自1O设备和存储器的响应信号 D.所有存储器和1/O设…

VirtualBox+Vagrant安装虚拟机

文章目录 一、下载Virtualbox和Vagrant1、下载2、安装 二、安装虚拟机1、新建目录D:\VirtualMachine2、执行vagrant init centos/7命令,就会在该目录下创建Vagrantfile文件3、执行vagrant up命令4、查看当前主机分给虚拟机的网关网段5、找到D:\VirtualMachine下的Va…

自定义一个简单的JDBC连接池实现方法(附代码演示)

Hi i,m JinXiang ⭐ 前言 ⭐ 本篇文章主要介绍自定义一个简单的JDBC连接池实现方法以及部分理论知识 🍉欢迎点赞 👍 收藏 ⭐留言评论 📝私信必回哟😁 🍉博主收将持续更新学习记录获,友友们有任何问题可以在…

github首次将文件合到远端分支,发现名字不是master,而是main

暂存区和本地仓库的信息都存储在.git目录中其中 其中,暂存区和本地仓库的信息都存储在.git目录中 在自己的github上实践 1、刚开始,git clone gitgithub.com:lingze8678/my_github.git到本地 2、在克隆后的代码中加入一个pdf文件 3、在git bash中操作…

查询绑定了所有id的name

1、如图,绑定了所有id的有A,B两个name 2、第一种Sql及效率 explain SELECT name,count(id) as count from test GROUP BY name HAVING count(id)(SELECT count(DISTINCT id) from test); 3、第二种sql及效率 explain select * from (SELECT name,count(id) as co…

VS2022异常解决Could not get emulator name after starting AVD

1、问题描述 在启动安卓仿真器时,弹出这个框 2、设置信息 冲着NET 8升级的VS2022,将其升级为 17.8.2,结果Xamarin开发时,安卓模拟器死活起不来,起来就黑屏。然后网上各种搜解决方案(包括不限于&#xf…

Fiddler抓包详细实用保姆级教程,小白一看就会

一、Fiddler4工作原理 Fiddler 是一款以代理web服务器的形式工作的,它使用代理地址:127.0.0.1,端口:8888,这是fiddler的默认端口。 我们发送的每一个请求和收到的每一个响应都会先经过fiddler,这样就实现了抓取数据包的工作 当Fiddler退出时…

C++基础 -41- 迭代器

每个stl 模板接口都有一个专用的迭代器 迭代器就是 stl 库中的 一个特殊指针,功能与指针类似(类似但不是) 迭代器定义格式 迭代器的使用,使用迭代器遍历向量容器的参数 代码运行结果 无论使用普通方式还是迭代器方式去都可以遍历vector容器

软著项目推荐 深度学习的智能中文对话问答机器人

文章目录 0 简介1 项目架构2 项目的主要过程2.1 数据清洗、预处理2.2 分桶2.3 训练 3 项目的整体结构4 重要的API4.1 LSTM cells部分:4.2 损失函数:4.3 搭建seq2seq框架:4.4 测试部分:4.5 评价NLP测试效果:4.6 梯度截断…

线程池原理初探

1.引言 合理利用线程池能够带来三个好处。第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。第二:提高响应速度。当任务到达时,任务可以不需要的等到线程创建就能立即执行。第三:提高线程的可管理性。…

windows下DSS界面本地集成linkis管理台

说明:当前开发环境为windows,node版本使用16.15.1。启动web时,确保后端服务已准备就绪。 1.linkis web编译 #进入项目WEB根目录 $ cd linkis/linkis-web #安装项目所需依赖 $ npm install参考官方编译说明,windows下编译一直异常…

【USRP】5G / 6G 原型系统 5g / 6G prototype system

面向5G/6G科研应用 USRP专门用于5G/6G产品的原型开发与验证。该系统可以在实验室搭建一个真实的5G 网络,基于开源的代码,专为科研用户设计。 软件无线电架构,构建真实5G移动通信系统 X410 采用了目前流行的异构式系统,融合了FP…

利用 EC2 和 S3 免费搭建私人网盘

网盘是一种在线存储服务,提供文件存储,访问,备份,贡献等功能,是我们日常中不可或缺的一种服务。 💻创建实例 控制台搜索EC2 点击启动EC2 选择AMI 选择可免费试用的 g代表采用了Graviton2芯片。 配置存储 配…

AIGC创作ChatGPT源码+AI绘画(Midjourney绘画)+支持GPT-4-Turbo模型+DALL-E3文生图

一、AI创作系统 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统,支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI…