freertos中采集任务优先级并上报的代码
时间: 2023-12-14 07:36:58 浏览: 161
任务优先级-c8051f340中文数据手册
FreeRTOS 中采集任务优先级并上报的代码可以通过以下步骤实现:
1. 定义一个函数,用于采集当前系统中所有任务的优先级并上报。
```c
void report_task_priorities(void)
{
TaskStatus_t *pxTaskStatusArray;
volatile UBaseType_t uxArraySize, x;
uint32_t ulTotalRunTime;
char pcWriteBuffer[1024];
// 采集当前系统中所有任务的状态信息
uxArraySize = uxTaskGetNumberOfTasks();
pxTaskStatusArray = (TaskStatus_t *)pvPortMalloc(uxArraySize * sizeof(TaskStatus_t));
uxArraySize = uxTaskGetSystemState(pxTaskStatusArray, uxArraySize, &ulTotalRunTime);
// 上报任务信息
sprintf(pcWriteBuffer, "Task Name\tPriority\tStack High Water Mark\n");
for (x = 0; x < uxArraySize; x++) {
sprintf(pcWriteBuffer, "%s%s\t%d\t%u\n", pcWriteBuffer, pxTaskStatusArray[x].pcTaskName,
pxTaskStatusArray[x].uxCurrentPriority, pxTaskStatusArray[x].usStackHighWaterMark);
}
// 上报任务信息,比如打印到串口、发送到云端等
send_report(pcWriteBuffer);
}
```
2. 在 FreeRTOS 系统中添加一个定时器任务,定时采集任务优先级并上报。
```c
void vTaskFunction(void *pvParameters)
{
TickType_t xLastWakeTime;
// 获取系统启动以来的滴答计数器值
xLastWakeTime = xTaskGetTickCount();
for (;;) {
// 定时采集任务优先级并上报
report_task_priorities();
// 等待一段时间后再次执行任务
vTaskDelayUntil(&xLastWakeTime, pdMS_TO_TICKS(5000));
}
}
int main(void)
{
// 创建一个定时器任务,用于定时采集任务优先级并上报
xTaskCreate(vTaskFunction, "Task Report", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY + 1, NULL);
// 启动 FreeRTOS 系统调度器
vTaskStartScheduler();
return 0;
}
```
以上代码实现了一个定时采集任务优先级并上报的功能,你可以根据具体需求进行修改和扩展。
阅读全文