FreeRTOS任务状态查询

一.任务相关API

vTaskList(),创建一个表格描述每个任务的详细信息

   char biaoge[1000];     //定义一个缓存

   vTaskList(biaoge);    //将表格存到这缓存中
   printf("%s /r/n",biaoge);

1.uxTaskPriorityGet()获取任务优先级

此函数用来获取指定任务的优先级,要用此函数的话宏 INCLUDE_uxTaskPriorityGet应该定义为1.

函数原型

UBaseType_t uxTaskPriorityGet(TaskHandle_t xTask)  在task.c中

参数

xTask : 要查找的任务的任务句柄

返回值 :获取到的对应的任务优先级 ,要去查看参数的类型,用其来定义返回值

2.vTaskPrioritySet() 改变任务优先级

此函数用于该改变某一个任务优先级,要使用此函数的话宏INCLUDE_uxTaskPrioritySet应该定义为1,函数原型如下

void vTaskPrioritySet(TaskHandle_t xTask,UBase Type_t uxNewpriority)

xTask:要查找的任务的任务句柄

uxNewpriority:任务要使用的新的优先级,可以是0~configMAX_PRIORITIES-1。

3.uxTASkGetsystemState()  获取系统中所有任务的任务壮态

        此函数用于获取系统中所有任务的任务壮态,每个任务的壮态信息保存在一个 TaskStatus_t类型的结构体里面,这个结构体里面包含了任务的任务句柄、任务名字、堆栈、优先级等信息,要使用此函数的话宏 configUSE_TRACE_FACILITY.应该定义力1

函数原型如下:
UBase Type_t ux TaskGetSystemState( TaskStatus 1 * const      px TaskStatusArray,
                                                                 const UBaseType_t      ux Array Size,
                                                                 uint32_1 * const            pulTotalRun Time )
参数:
pxTaskStatusArray: 指向 TaskStatus_1结构体类型的数组首地址,每个任务至少需要一个TaskStatus_t 结构体,任务的数量可以使用的数uxTaskGetNumberOfTasks()。

结构体 TaskStatus_t 在文件task.h中有如下定义:
typedef struct TASK_ STATUS
{

       TaskHandle 1     xHandle;                                //任务句柄
       const char *        pc TaskName;                       //任务名字
       UBase Type t     x TaskNumber;                      //任务编号  
       eTaskState         eCurrentState;                      //当前任务壮态,cTaskState 是一个枚举类型
       UBase Type_t     uxCurrentPriority;              //任务当前的优先级
       UBase Type_t     uxBasePriority;                    //任务基础优先级
       uint32_1             ulRunTimeCounter,              //任务运行的总时间
       StackType 1 *     pxStackBase;                       //堆栈基地址
       uint 16_t            usStackHigh WaterMark;      //从任务创建以来任务堆找剩余的最小大小,此
                                                                                值如果太小的话说明堆找有溢出的风险。

) TaskStatus_t;

uxArraySize:保存任务壮态数组的数组的大小。



 

4.vTaskGetInfo()获取指定任务的状态

5.xTaskGetApplication Task Tag()用于获取任务Tag值

6.xTaskGetCurrentTaskHandle()获取当前任务的任务句柄

7.xTaskGetHandle()根据任务文字获取任务的任务句柄

在使用函数下TaskCreate()或xTaskCreateStatic()创建任务的时候都会给任务分配一个任务名,.xTaskGetHandle()函数就是根据这个任务名来查询其对应得任务句柄。

要使用此函数的话宏 INCLUDE_xTaskGetHandle 应该定义力1

函数原型如下:

 TakeHandle_T xTaskGetHandle( const char*  pcNameQuery)

参数

pcNameToQuery:    任务名,C语言字符串。

要把这个函数获得句柄就要定义一个和定义这个函数一样的类型数

写好获取句柄的函数和打印函数    

 Taskhandle = xTaskGetHandle("query_task");  query_task要查询的任务的任务名,这个函数的参数是指针类型,所以要用字符串

发现两个获取的句柄一样,函数使用正确

8.xTaskGetIdleTaskHandle() 用于返回空闲任务的任务句柄,要使用此函数的话对应宏要为1

9.uxTaskGetStackHighWaterMark()用于查询任务从创建好到现在的历史剩余最小值,这个值越小说明任务堆栈溢出的可能性就越大!

FreeRTOS 把这个历史剩余最小值叫做“高水位线”。此函数相对来说会多耗费一点时间,所以在代码调试阶段可以使用,产品发布的时候最好不要使用。要使用此函数的话宏   INCLUDE_uxTaskGetStackHigh WaterMark 必须为1,此函数原型:下:
 UBase Type_t ux TaskGetStackHighWaterMark( TaskHandle_t xTask)
参数:
xTask:要查询的任务的任务句柄,当这个参数为 NULL 的话说明查询自身任务(即调用函数 ux TaskGetStackHlighWaterMark0的任务)的“高水位线”。
返回值:任务堆栈的“高水位线”值,也就是堆栈的历史剩余最小值。

定义的大小为200,剩余146,说明用了54个。

  10.eTaskGetState()此函数用于查询某个任务的运行壮态

比如:运行态、阻塞态、挂起态、就绪态等,返回值是个枚举类型。要使用此函数的话宏 INCLUDE_cTaskGietStale 必须为1,函数原型如下,
eTaskState    eTaskGetState( TaskHandle_t  xTask)

xTask:要查询的任务的任务句柄

返回值:返回值eTaskState的类型,这个是个枚举类型,在文件task.h中有定义

返回值1:就绪态的意思

11.pcTaskGetName() 根据任务句柄查询任务的名字

12.xTaskGetTickCount()查询任务从调度到现在运行的时间

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

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

相关文章

yolov5代码详解--3.python代码脚本

三、val.py val.py的主要作用是对训练好的模型进行验证(或评估)。具体来说,它用于在指定的验证集上评估模型的性能,计算各项评估指标,并输出结果。val.py通常在模型训练完成后运行,用于验证模型的检测精度、…

无人机应用探索:玻纤增强复合材料的疲劳性能研究

随着无人机技术的快速发展,轻量化已成为其结构设计的核心需求。玻纤增强复合材料凭借高强度、低密度和优异的耐环境性能,成为无人机机身、旋翼支架等关键部件的理想选择。然而,无人机在服役过程中需应对复杂多变的环境:高空飞行时…

Python SQLite3 保姆级教程:从零开始学数据库操作

Python SQLite3 保姆级教程:从零开始学数据库操作 本文适合纯新手!无需任何数据库基础,跟着步骤操作即可掌握 SQLite3 的核心用法。 目标:让你像用记事本一样轻松操作数据库! 目录 什么是 SQLite3?环境准…

C语言中的整数类型(short,int,long和long long)

整数是编程中最常见的一种数据类型,C语言提供了多种整数类型,包括 short、int、long 和 long long,它们的主要区别在于存储范围和内存占用的大小。 本节将详细讲解这些整数类型的定义、特性、使用场景以及注意事项,帮助你全面理解…

使用jcodec库,访问网络视频提取封面图片上传至oss

注释部分为FFmpeg(确实方便但依赖太大,不想用) package com.zuodou.upload;import com.aliyun.oss.OSS; import com.aliyun.oss.model.ObjectMetadata; import com.aliyun.oss.model.PutObjectRequest; import com.zuodou.oss.OssProperties;…

游戏引擎学习第147天

仓库:https://gitee.com/mrxiao_com/2d_game_3 上一集回顾 具体来说,我们通过隐式计算来解决问题,而不是像数字微分分析器那样逐步增加数据。我们已经涵盖了这个部分,并计划继续处理音量问题。不过,实际上我们现在不需要继续处理…

使用Dockerfile打包java项目生成镜像部署到Linux_java项目打docker镜像的dockerfile

比起容器、镜像来说,Dockerfile 非常普通,它就是一个纯文本,里面记录了一系列的构建指令,比如选择基础镜像、拷贝文件、运行脚本等等,每个指令都会生成一个 Layer,而 Docker 顺序执行这个文件里的所有步骤&…

Linux -- 磁盘结构、文件系统ext2

一、磁盘 1.磁盘的物理结构 2.磁盘的存储结构 盘片:是机械硬盘存储数据的主要介质,一般由铝合金或玻璃等材料制成,表面涂有一层磁性材料。数据通过磁头在盘片的磁性涂层上进行磁化来记录,磁化的不同方向代表二进制的 0 和 1。盘面…

标量、向量、矩阵与张量:从维度理解数据结构的层次

在数学和计算机科学中,维度描述了数据结构的复杂性,而标量、向量、矩阵、张量则是不同维度的数据表示形式。它们的关系可以理解为从简单到复杂的扩展,以下是详细解析: 1. 标量(Scalar):0维数据 定义:单个数值,没有方向,只有大小。 维度:0维(无索引)。 示例: 温度…

点云数据处理--splat转3dtiles

文章目录 处理流程简介核心功能实现数据读取与格式转换定义Point类数据读取splat转gltf 点云数据分割定义四叉树递归生成3dtiles瓦片 生成tileset.json递归生成tileset.json计算box 主函数调用渲染 下一步工作性能优化渲染效果调优其他 源码地址: github 处理流程简…

OneM2M:全球性的物联网标准-可应用于物联网中

OneM2M 是一个全球性的物联网(IoT)标准,旨在为物联网设备和服务提供统一的框架和接口,以实现设备之间的互操作性、数据共享和服务集成。OneM2M 由多个国际标准化组织(如 ETSI、TIA、TTC、ARIB 等)共同制定,目标是解决物联网领域的碎片化问题,提供一个通用的标准,支持跨…

【Python 入门基础】—— 人工智能“超级引擎”,AI界的“瑞士军刀”,

欢迎来到ZyyOvO的博客✨,一个关于探索技术的角落,记录学习的点滴📖,分享实用的技巧🛠️,偶尔还有一些奇思妙想💡 本文由ZyyOvO原创✍️,感谢支持❤️!请尊重原创&#x1…

Java爬虫获取淘宝商品详情数据的完整指南

在电商领域,获取商品详情数据对于市场分析、价格监控、用户体验优化等场景具有重要意义。淘宝作为国内领先的电商平台,提供了丰富的API接口供开发者使用,其中item_get和item_get_pro接口可以用来获取商品的详细信息。本文将详细介绍如何使用J…

Ubuntu 下 nginx-1.24.0 源码分析 - ngx_init_cycle 函数

nei声明在 src/core/ngx_cycle.h ngx_cycle_t *ngx_init_cycle(ngx_cycle_t *old_cycle);实现在 src/core/ngx_cycle.c ngx_cycle_t * ngx_init_cycle(ngx_cycle_t *old_cycle) {void *rv;char **senv;ngx_uint_t i, n;ngx_log_t …

qt 操作多个sqlite文件

qt 操作多个sqlite文件 Chapter1 qt 操作多个sqlite文件1. 引入必要的头文件2. 创建并连接多个SQLite数据库3. 代码说明4. 注意事项 Chapter2 qt 多线程操作sqlite多文件1. 引入必要的头文件2. 创建数据库操作的工作线程类3. 在主线程中创建并启动多个工作线程4. 代码说明5. 运…

最新版本WebContext构造函数-避坑

import org.thymeleaf.context.IWebContext; import org.thymeleaf.context.WebContext; 当你想把页面信息全部获取出来存到redis缓存中使用时,SpringWebContext在Spring5中报错 SpringWebContext ctx new SpringWebContext(request, response,request.getServlet…

用Python分割并高效处理PDF大文件

在处理大型PDF文件时,将它们分解成更小、更易于管理的块通常是有益的。这个过程称为分区,它可以提高处理效率,并使分析或操作文档变得更容易。在本文中,我们将讨论如何使用Python和为Unstructured.io库将PDF文件划分为更小的部分。…

neo4j随笔-将csv文件导入知识图谱

目录 导入前的准备 导入csv文件 导入nodes1.1.csv并动态为节点添加标签 ​编辑导入relations1.1.csv并动态为关系添加标签 结果 导入前的准备 我有两个csv文件 nodes1.1.csv存放节点信息,用记事本打开,能正常显示,且编码为UTF-8,就可以…

cpu 多级缓存L1、L2、L3 与主存关系

现代 CPU 的多级缓存(L1、L2、L3)和主存(DRAM)构成了一个层次化的内存系统,旨在通过减少内存访问延迟和提高数据访问速度来优化计算性能。以下是对多级缓存和主存的详细解析: 1. 缓存层次结构 现代 CPU 通…

C++:入门详解(关于C与C++基本差别)

目录 一.C的第一个程序 二.命名空间(namespace) 1.命名空间的定义与使用: (1)命名空间里可以定义变量,函数,结构体等多种类型 (2)命名空间调用(&#xf…