freertos获取任务状态
时间: 2025-06-15 14:27:08 浏览: 14
### FreeRTOS 中获取任务状态的 API 函数
在 FreeRTOS 中,`vTaskGetInfo` 是用于获取特定任务的状态信息的重要函数之一[^2]。此函数允许开发者检索有关某个任务的各种细节,包括其当前状态、优先级以及堆栈使用情况。
#### `vTaskGetInfo` 的参数说明:
- **xTask**: 要查询的任务句柄。如果要获取调用者自身的状态,则可以传递 `NULL` 或通过 `xTaskGetCurrentTaskHandle()` 来获得当前执行中的任务句柄[^4]。
- **pxTaskStatus**: 指向 `TaskStatus_t` 类型结构体的指针,用来接收返回的任务状态数据。这个结构体内包含了多个字段,比如任务名称、ID、运行次数统计等有用的信息。
- **xGetFreeStackSpace**: 如果设置为 pdTRUE (非零),则会计算并填充剩余可用堆栈空间;如果是pdFALSE(0),则不会更新这部分信息。
- **eState**: 可选参数,表示希望过滤出来的具体任务状态(eRunning,eReady,eBlocked,eSuspended)。当设为tsInvalid时,意味着不应用任何筛选条件。
下面是一个简单的例子展示如何利用上述提到的功能来打印出所有处于就绪态的任务列表及其基本信息:
```c
#include "FreeRTOS.h"
#include "task.h"
// 定义一个数组存储任务状态信息
#define MAX_TASKS 10
static TaskStatus_t taskStatusArray[MAX_TASKS];
UBaseType_t arraySize;
void PrintReadyTasks(void){
// 获取系统内所有任务的数量,并尝试读取最多MAX_TASKS个任务的状态
arraySize = uxTaskGetSystemState(taskStatusArray, MAX_TASKS, NULL);
for(int i=0; i<arraySize ;i++){
if(taskStatusArray[i].eCurrentState == eReady){ // 这里只关心就绪态的任务
printf("Name:%s\tNumber:%d\n",
pcTaskGetName((TaskHandle_t)&taskStatusArray[i]),
taskStatusArray[i].xTaskNumber );
}
}
}
```
此外,在某些情况下可能还需要调整任务优先级以优化调度行为,这时就可以借助于另一个实用工具——`vTaskPrioritySet` 函数[^3]。它接受两个参数:目标任务的手柄和新的优先级别数值。
阅读全文
相关推荐


















