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

         本篇博客较为基础,介绍时间片调度和常用的任务状态查询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

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

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

  • 25
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

未来可期,静待花开~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值