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