我就是说vTaskGetRunTimeStats整个函数返回的是系统的总计运行时间和每个任务占用的总计时长,而非一段时间的,这样子是来统计是不直观的,有什么办法处理?
时间: 2024-02-26 19:59:00 浏览: 26
如果你想获取一段时间内每个任务的CPU占用率,可以使用FreeRTOS提供的`uxTaskGetSystemState()`函数。这个函数会返回一个包含系统中所有任务状态信息的结构体,其中就包括每个任务的CPU占用率。你可以定期调用这个函数来获取一段时间内的任务状态信息,然后根据任务的CPU占用率来分析任务的运行情况。
具体来说,`uxTaskGetSystemState()`函数会返回一个包含以下信息的结构体:
```c
typedef struct xTASK_STATUS
{
TaskHandle_t xHandle; /* 任务句柄 */
const char *pcTaskName; /* 任务名称 */
UBaseType_t uxCurrentPriority; /* 当前优先级 */
UBaseType_t uxBasePriority; /* 基本优先级 */
eTaskState eCurrentState; /* 当前状态 */
uint32_t ulRunTimeCounter; /* 运行时间计数器 */
uint32_t ulStackHighWaterMark; /* 堆栈高水位线 */
} TaskStatus_t;
typedef struct xTASK_STATUS_INFO
{
TaskStatus_t *pxTaskStatusArray; /* 任务状态数组 */
UBaseType_t uxCurrentNumberOfTasks; /* 当前任务数量 */
UBaseType_t uxTaskStatusArraySize; /* 任务状态数组大小 */
uint32_t ulTotalRunTime; /* 系统总计运行时间 */
} TaskStatusArray_t;
```
其中,`pxTaskStatusArray`是一个指向任务状态数组的指针,可以通过这个指针来获取每个任务的状态信息,包括任务的名称、优先级、状态、运行时间计数器等。`uxCurrentNumberOfTasks`是当前系统中任务的数量,`uxTaskStatusArraySize`是任务状态数组的大小,`ulTotalRunTime`是系统的总计运行时间。
你可以定期调用`uxTaskGetSystemState()`函数,然后遍历任务状态数组来获取每个任务在一段时间内的CPU占用率。具体来说,你可以在两次调用`uxTaskGetSystemState()`函数之间计算每个任务的运行时间差,然后根据总计运行时间和差值来计算每个任务的CPU占用率。