本专栏将对FreeRTOS进行快速讲解,带你了解并使用FreeRTOS的各部分内容。适用于快速了解FreeRTOS并进行开发、突击面试、对新手小白非常友好。期待您的后续关注和订阅!
目录
(1)uxTaskGetStackHighWaterMark
FreeRTOS任务相关API函数
FreeRTOS提供的丰富API函数为开发者在任务管理、状态查询和时间统计等方面提供了强有力的支持。通过合理使用这些API函数,可以显著提高嵌入式系统的开发效率和运行性能。在实际应用中,开发者应根据项目需求选择合适的API函数,并注意相关宏定义的配置,以充分发挥FreeRTOS的功能优势。
以下函数为获取任务相关数据的API函数,现在不必熟练使用,知道每个函数具体是用来做什么的即可,下文将对以下函数进行详细介绍
函数 | 作用 |
uxTaskPriorityGet() | 获取任务优先级 |
vTaskPrioritySet() | 设置任务优先级 |
uxTaskGetNumberOfTasks() | 获取系统中任务的数量 |
uxTaskGetSystemState() | 获取所有任务状态信息 |
vTaskGetInfo() | 获取指定单个的任务信息 |
xTaskGetCurrentTaskHandle() | 获取当前任务的任务句柄 |
xTaskGetHandle() | 根据任务名获取该任务的任务句柄 |
uxTaskGetStackHighWaterMark() | 获取任务的任务栈历史剩余最小值 |
eTaskGetState() | 获取任务状态 |
vTaskList() | 获取任务状态 |
vTaskGetRunTimeStats() | 获取任务的运行时间 |
1 任务优先级相关API函数
(1)uxTaskPriorityGet
函数原型:UBaseType_t uxTaskPriorityGet( const TaskHandle_t xTask )
函数作用:uxTaskPriorityGet
函数用于获取指定任务的优先级
使用前提:使用该函数前需在配置文件中将宏INCLUDE_uxTaskPriorityGet
置为1
其返回值:任务优先级数值
形式参数:
形参 | 描述 |
xTask | 要查找的任务句柄,NULL代表任务自身 |
函数使用:
// 获取当前任务的优先级
TaskHandle_t xHandle = xTaskGetCurrentTaskHandle(); // 获取当前任务的任务句柄
UBaseType_t uxPriority = uxTaskPriorityGet(xHandle); // 获取任务优先级
printf("Current Task Priority: %u\n", uxPriority); // 打印任务优先级
(2)vTaskPrioritySet
函数原型:void vTaskPrioritySet( TaskHandle_t xTask , UBaseType_t uxNewPriority )
函数作用:vTaskPrioritySet
函数用于设置指定任务的优先级
使用前提:使用该函数前需在配置文件中将宏INCLUDE_vTaskPrioritySet
置为1
形式参数:
形参 | 描述 |
xTask | 任务句柄,NULL代表任务自身 |
uxNewPriority | 需要设置的任务优先级 |
函数使用:
// 设置当前任务的优先级为3
TaskHandle_t xHandle = xTaskGetCurrentTaskHandle(); // 获取当前任务的任务句柄
vTaskPrioritySet(xHandle, 3); // 设置任务优先级为3
printf("Task Priority Set to 3\n"); // 打印设置优先级的信息
2 任务数量及状态查询API函数
(1)uxTaskGetNumberOfTasks
函数原型:UBaseType_t uxTaskGetNumberOfTasks( void )
函数作用:用于获取当前系统中的任务数量
使用前提:无
其返回值:系统中任务的数量
形式参数:无
函数使用:
// 获取系统中任务的数量
UBaseType_t uxNumberOfTasks = uxTaskGetNumberOfTasks(); // 获取任务数量
printf("Number of Tasks: %u\n", uxNumberOfTasks); // 打印任务数量
(2)uxTaskGetSystemState
函数原型:UBaseType_t uxTaskGetSystemState( TaskStatus_t *pxTaskStatusArray, UBaseType_t uxArraySize, configRUN_TIME_COUNTER_TYPE *pulTotalRunTime );
函数作用:用于获取系统中所有任务的状态信息
使用前提:使用该函数前需在配置文件中将宏configUSE_TRACE_FACILITY
置为1
其返回值:获取信息的任务数量
形式参数:
形参 | 描述 |
xTaskStatusArray | 指向TaskStatus_t 结构体数组首地址 |
uxArraySize | 接收信息的数组大小 |
pulTotalRunTime | 系统总运行时间,为NULL 则省略总运行时间值 |
函数使用:
// 获取系统中所有任务的状态信息
TaskStatus_t pxTaskStatusArray[10]; // 定义TaskStatus_t数组用于存储任务状态信息
UBaseType_t uxTasks = uxTaskGetSystemState(pxTaskStatusArray, 10, NULL); // 获取任务状态信息
printf("Number of Tasks Retrieved: %u\n", uxTasks); // 打印获取到的任务数量
// 获取的信息内容如下
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; /* 任务栈历史剩余最小值 */
3 任务信息获取API函数
(1)vTaskGetInfo
函数原型:void vTaskGetInfo( TaskHandle_t xTask, TaskStatus_t *pxTaskStatus, BaseType_t xGetFreeStackSpace, eTaskState eState )
函数作用:用于获取指定任务的详细信息
使用前提:使用该函数前需在配置文件中将宏configUSE_TRACE_FACILITY
置为1
其返回值:无
形式参数:
形参 | 描述 |
xTask | 指定获取信息的任务的句柄 |
pxTaskStatus | 接收任务信息的变量 |
xGetFreeStackSpace | 任务栈历史剩余最小值, 当为“pdFALSE” 则跳过这个步骤, 当为“pdTRUE”则检查历史剩余最小堆栈 |
eState | 任务状态,可直接赋值,如想获取代入“eInvalid” |
函数使用:
// 获取当前任务的详细信息
TaskStatus_t xTaskDetails; // 定义TaskStatus_t结构体用于存储任务信息
vTaskGetInfo(xTaskGetCurrentTaskHandle(), &xTaskDetails, pdTRUE, eInvalid); // 获取任务信息
printf("Task Name: %s\nTask Priority: %u\n", xTaskDetails.pcTaskName, xTaskDetails.uxCurrentPriority); // 打印任务名称和优先级
(2)xTaskGetCurrentTaskHandle
函数原型:TaskHandle_t xTaskGetCurrentTaskHandle( void )
函数作用:函数用于获取当前任务的句柄
使用前提:使用该函数前需在配置文件中将宏INCLUDE_xTaskGetCurrentTaskHandle
置为1
其返回值:当前任务的句柄
形式参数:无
函数使用:
// 获取当前任务的句柄
TaskHandle_t xHandle = xTaskGetCurrentTaskHandle(); // 获取当前任务的句柄
printf("Current Task Handle: %p\n", (void*)xHandle); // 打印任务句柄
(3)xTaskGetHandle
函数原型:TaskHandle_t xTaskGetHandle( const char *pcNameToQuery )
函数作用:函数用于通过任务名获取任务的句柄
使用前提:使用该函数前需在配置文件中将宏INCLUDE_xTaskGetHandle
置为1
其返回值:目标任务的句柄
形式参数:
形参 | 描述 |
pcNameToQuery | 任务名 |
函数使用:
// 通过任务名获取任务的句柄
TaskHandle_t xHandle = xTaskGetHandle("TaskName"); // 获取任务句柄
printf("Task Handle for 'TaskName': %p\n", (void*)xHandle); // 打印任务句柄
4 任务栈和状态相关API函数
(1)uxTaskGetStackHighWaterMark
函数原型:UBaseType_t uxTaskGetStackHighWaterMark( TaskHandle_t xTask );
函数作用:用于获取指定任务的任务栈历史最小剩余堆栈
使用前提:使用该函数前需在配置文件中将宏INCLUDE_uxTaskGetStackHighWaterMark
置为1
其返回值:任务栈的历史剩余最小值
形式参数:
形参 | 描述 |
xTask | 任务句柄 |
函数使用:
// 获取当前任务的任务栈历史最小剩余堆栈
UBaseType_t uxHighWaterMark = uxTaskGetStackHighWaterMark(xTaskGetCurrentTaskHandle()); // 获取任务栈的历史最小剩余堆栈
printf("Stack High Water Mark: %u\n", uxHighWaterMark); // 打印任务栈的历史最小剩余堆栈
(2)eTaskGetState
函数原型:eTaskState eTaskGetState( TaskHandle_t xTask )
函数作用:函数用于获取指定任务的运行状态
使用前提:使用该函数前需在配置文件中将宏INCLUDE_eTaskGetState
置为1
其返回值:任务当前的状态
形式参数:
形参 | 描述 |
xTask | 待获取状态任务的任务句柄 |
函数使用:
// 获取当前任务的运行状态
eTaskState eState = eTaskGetState(xTaskGetCurrentTaskHandle()); // 获取任务状态
printf("Current Task State: %d\n", eState); // 打印任务状态
5 任务栈和状态相关API函数
(1)vTaskList
函数原型:void vTaskList( char *pcWriteBuffer )
函数作用:函数用于以表格形式获取系统中所有任务的信息
使用前提:将宏configUSE_TRACE_FACILITY
和configUSE_STATS_FORMATTING_FUNCTIONS
置为1。
其返回值:无
形式参数:
形参 | 描述 |
pcWriteBuffer | 接收任务信息的缓存指针 |
函数使用:
// 获取系统中所有任务的信息并打印
char pcWriteBuffer[1024]; // 定义缓存区用于存储任务信息
vTaskList(pcWriteBuffer); // 获取任务信息
printf("%s", pcWriteBuffer); // 打印任务信息
(2)vTaskGetRunTimeStats
函数原型:void vTaskGetRunTimeStats( char *pcWriteBuffer )
函数作用:函数用于统计系统中所有任务的运行时间
使用前提:将宏configGENERATE_RUN_TIME_STATS
和configUSE_STATS_FORMATTING_FUNCTIONS
置为1
其返回值:无
形式参数:
形参 | 描述 |
pcWriteBuffer | 接收任务信息的缓存指针 |
函数使用:
// 统计系统中所有任务的运行时间
char pcWriteBuffer[1024]; // 定义缓存指针用于存储运行时间信息
vTaskGetRunTimeStats(pcWriteBuffer); // 获取任务运行时间信息
printf("%s", pcWriteBuffer); // 打印运行时间信息
本专栏将对FreeRTOS进行快速讲解,带你了解并使用FreeRTOS的各部分内容。期待诸君的关注点赞!
标签:优先级,函数,FreeRTOS,句柄,通篇,第十章,获取,任务,API From: https://blog.csdn.net/weixin_49007164/article/details/140521470