#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
float getCPUUsage() {
TaskStatus_t *taskArray;
UBaseType_t taskCount;
uint32_t idleTime = 0, totalTime = 0;
taskCount = uxTaskGetNumberOfTasks();
taskArray = (TaskStatus_t*)pvPortMalloc(taskCount * sizeof(TaskStatus_t));
if (!taskArray) return 0.0;
taskCount = uxTaskGetSystemState(taskArray, taskCount, &totalTime);
for (UBaseType_t i = 0; i < taskCount; i++) {
if (strcmp(taskArray[i].pcTaskName, "IDLE") == 0) {
idleTime = taskArray[i].ulRunTimeCounter;
break;
}
}
vPortFree(taskArray);
if (totalTime == 0) return 0.0;
return 100.0 * (1.0 - (float)idleTime / (float)totalTime);
}
Źródło: