首页 > 其他分享 >FreeRTOS基础(十):FreeRTOS任务状态查询API函数介绍

FreeRTOS基础(十):FreeRTOS任务状态查询API函数介绍

时间:2024-06-04 23:32:40浏览次数:25  
标签:优先级 函数 FreeRTOS 句柄 查询 获取 任务 API 2.2

         本篇博客较为基础,介绍时间片调度和常用的任务状态查询API函数接口使用。

目录

一、时间片调度简介

二、任务状态查询API函数介绍

2.1 常用API函数总览

2.2 常用API函数介绍

2.2.1 获取指定任务优先级

2.2.2 改变某个任务的任务优先级

2.2.3 获取系统中任务的任务数量

2.2.4 获取系统中所有任务的任务状态信息

2.2.5 获取指定的单个任务的状态信息

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

2.2.7 获取指定任务的任务栈历史最小剩余堆栈 

2.2.8 以“表格”的形式获取系统中任务的信息  

2.2.9 时间统计API函数


一、时间片调度简介

        同等优先级任务轮流地享有相同的 CPU 时间(可设置), 叫时间片,在FreeRTOS中,一个时间片就等于SysTick 中断周期。

注意:使用时间片调度需把宏 configUSE_TIME_SLICING 和 configUSE_PREEMPTION 置1

运行条件:

1、创建三个任务:Task1、Task2、Task3

2、Task1、Task2、Task3的优先级均为1;即3个任务同等优先级 

运行过程如下:

1、首先Task1运行完一个时间片后,切换至Task2运行;

2、Task2运行完一个时间片后,切换至Task3运行;

3、Task3运行过程中(还不到一个时间片),Task3阻塞了(系统延时或等待信号量等),此时直接切换到下一个任务Task1;

4、Task1运行完一个时间片后,切换至Task2运行。

注意:

1、同等优先级任务,轮流执行;时间片流转;

2、一个时间片大小,取决为滴答定时器中断频率;

3、注意没有用完的时间片不会再使用,下次任务Task3得到执行

还是按照一个时间片的时钟节拍运行;

二、任务状态查询API函数介绍

2.1 常用API函数总览

2.2 常用API函数介绍

2.2.1 获取指定任务优先级

UBaseType_t  uxTaskPriorityGet(  const TaskHandle_t xTask  )

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

2.2.2 改变某个任务的任务优先级

void vTaskPrioritySet( TaskHandle_t xTask , UBaseType_t uxNewPriority )

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

2.2.3 获取系统中任务的任务数量

UBaseType_t uxTaskGetNumberOfTasks( void )

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

2.2.4 获取系统中所有任务的任务状态信息

UBaseType_t  uxTaskGetSystemState(   TaskStatus_t * const pxTaskStatusArray,
                                      				const UBaseType_t uxArraySize,
                                      				configRUN_TIME_COUNTER_TYPE * const pulTotalRunTime  )

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

 

2.2.5 获取指定的单个任务的状态信息

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

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

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

TaskHandle_t    xTaskGetCurrentTaskHandle( void ) 

此函数用于获取当前任务的任务句柄, 使用该函数需将宏 INCLUDE_xTaskGetCurrentTaskHandle  置 1

返回值

描述

                      TaskHandle_t

当前任务的任务句柄

2.2.7 通过任务名获取任务句柄

TaskHandle_t xTaskGetHandle(const char * pcNameToQuery); 

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

形参

描述

pcNameToQuery

                                             任务名

返回值

描述

    TaskHandle

                                 任务句柄

2.2.7 获取指定任务的任务栈历史最小剩余堆栈 

UBaseType_t    uxTaskGetStackHighWaterMark( TaskHandle_t  xTask )

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

使用该函数需将宏 INCLUDE_uxTaskGetStackHighWaterMark 置 1

形参

描述

              xTask

                       任务句柄

返回值

描述

    UBaseType_t

       任务栈的历史剩余最小值

2.2.8 查询某个任务的运行状态

eTaskState    eTaskGetState(TaskHandle_t xTask)

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

形参

描述

              xTask

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

返回值

描述

     eTaskState

                                任务状态

 

2.2.8 以“表格”的形式获取系统中任务的信息  

void   vTaskList(char * pcWriteBuffer)

此函数用于以“表格”的形式获取系统中任务的信息 ;使用此函数需将宏 configUSE_TRACE_FACILITY 和configUSE_STATS_FORMATTING_FUNCTIONS 置1

形参

描述

        pcWriteBuffer

        接收任务信息的缓存指针

Name      : 创建任务的时候给任务分配的名字。
State      : 任务的壮态信息, B 是阻塞态, R 是就绪态, S 是挂起态, D 是删除态
Priority  :任务优先级。
Stack      : 任务堆栈的“高水位线”,就是堆栈历史最小剩余大小。
Num      : 任务编号,这个编号是唯一的,当多个任务使用同一个任务名的时候可以通过此编号来做区分。

 

2.2.9 时间统计API函数

Void    vTaskGetRunTimeStats( char * pcWriteBuffer ) 

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

形参

描述

       pcWriteBuffer

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

至此,已经讲解完毕!初次学习,循序渐进,一步步掌握即可!以上就是全部内容!请务必掌握,创作不易,欢迎大家点赞加关注评论,您的支持是我前进最大的动力!下期再见! 

标签:优先级,函数,FreeRTOS,句柄,查询,获取,任务,API,2.2
From: https://blog.csdn.net/weixin_47040031/article/details/139454112

相关文章

  • QShop商城-API权限控制
    QShop商城-API权限控制在使用Qs.WebApi过程中,系统会对所有的Api进行权限控制。如果没有登录就访问Api接口,会提示"认证失败,Token无效或已超时",如下图: 如果想正常调用,必需先调用登录接口/api/Check/Login拿到登录token,如下:把token值放置在httpheaderX-Token中,即可正......
  • C#使用advapi32.dll来实现注册表的增、删、改、查
    合集-OpenTools(4) 1..NET使用P/Invoke来实现注册表的增、删、改、查功能05-142..NET实现获取NTP服务器时间并同步(附带Windows系统启用NTP服务功能)05-153.工业福利!用.NET快速开发物联网扫码器设备的通用扫码功能05-174.上位机开发福利!快速掌握.NET中的Modbus通信05-22......
  • 九、FreeRTOS学习笔记-列表和列表项
    列表和列表项的简介列表是FreeRTOS中的一个数据结构,概念上和链表有点类似,列表被用来跟踪FreeRTOS中的任务。列表项就是存放在列表中的项目列表相当于链表,列表项相当于节点,FreeRTOS中的列表是一个双向环形链表列表的特点:列表项间的地址非连续的,是人为的连接到一起的。列表......
  • MongoDB CRUD操作:地理位置应用——通过地理空间查询查找餐厅
    MongoDBCRUD操作:地理位置应用——通过地理空间查询查找餐厅文章目录MongoDBCRUD操作:地理位置应用——通过地理空间查询查找餐厅地图的扭曲搜索餐厅浏览数据查找当前邻居查找附近所有餐厅查找一定距离内的餐厅使用`$geoWithin`,不排序使用`$nearSphere`,排序MongoDB......
  • webapi 接收前端上传的文件
    usingMicrosoft.AspNetCore.Http;usingMicrosoft.AspNetCore.Mvc;usingSystem.IO;usingSystem.IO.Compression;namespaceWebApplication1.Controllers{[Route("api/[controller]/[action]")][ApiController]publicclassValuesControlle......
  • python系列:一文读懂FastAPI:Python 开发者的福音
    一文读懂FastAPI:Python开发者的福音一文读懂FastAPI:Python开发者的福音第一步:安装FastAPI第二步:创建一个FastAPI应用第三步:定义接口第四步:运行应用第五步:查看接口文档总结一文读懂FastAPI:Python开发者的福音FastAPI是一个基于Python的现代化Web框架,它提供了快......
  • 使用Python连接到MySQL数据库并执行查询
    在当今数字化时代,数据是企业和组织中至关重要的资产之一。数据库是存储和管理数据的核心工具之一,而MySQL则是其中一种流行的关系型数据库管理系统。如何使用Python编程语言连接到MySQL数据库,并执行查询以检索所需的数据。首先,需要安装pymysql库:pipinstallpymysql下......
  • SpringBoot+微信支付-JSAPI
    引入微信支付SDKMaven:com.github.wechatpay-apiv3:wechatpay-java-core:0.2.12Maven:com.github.wechatpay-apiv3:wechatpay-java:0.2.12代码示例packagexxxx.cashier.payChannel.handler;importxxxx.common.domain.model.exception.BusinessException;importxxxx.c......
  • spring boot mybatis mysql 对emoji表情的插入与查询支持
    在网上查了很多都是要求在数据层面修改比如userName字段的值有可能存emoji表情那就把字段改成字符集 utf8mb4我的排序规则是utf8mb4_unicode_ci,如果单个字段不行就整个表varchar字段都改成这样的到了这部,使用mysql客户端对这个字段增删改查是没问题的但是很少有人提到myb......
  • 如何简单实现suno-api账号保活
    本文由ChatMoney团队出品简介之前的一个简易的项目suno-api。是使用cookie来获取suno-token发起请求的,之前写的简单,并没有做cookie保活,在运行一段时间后cookie会失效,api便失效了。那现在就来实现一个简单的账号保活。保活原理账号保活的实现原理比较简单,其实就是每隔一段时间......