vTaskGetRunTimeStats()

库函数版本
主要使用函数 vTaskGetRunTimeStats() PDF手册第177页
函 数 vTaskGetRunTimeStats() 是 一 个 很 实 用 的 函 数 , 要 使 用 此 函 数 的 话 宏 configGENERATE_RUN_TIME_STATS 和configUSE_STATS_FORMATTING_FUNCTIONS 必须 都为 1。如果宏 configGENERATE_RUN_TIME_STATS 为 1 的话还需要实现一下几个宏定义:
● portCONFIGURE_TIMER_FOR_RUN_TIME_STATS(),此宏用来初始化一个外设来
提供时间统计功能所需的时基,一般是定时器/计数器。这个时基的分辨率一定要比 FreeRTOS
的系统时钟高,一般这个时基的时钟精度比系统时钟的高 10~20 倍就可以了。
1.● portGET_RUN_TIME_COUNTER_VALUE()或者
2.portALT_GET_RUN_TIME_COUNTER_VALUE(Time),这两个宏实现其中一个就行
了,这两个宏用于提供当前的时基的时间值。
函数原型如下: void vTaskGetRunTimeStats( char *pcWriteBuffer )
参数: pcWriteBuffer: 保存任务时间信息的存储区。存储区要足够大来保存任务时间信息。
3.configGENERATE_RUN_TIME_STATS和configUSE_STATS_FORMATTING_FUNCTIONS在这里配置为1
在这里插入图片描述

4.定义这个函数用来初始化一个外设来提供时间统计功能所需的时基
定义FreeRTOSRunTimeTicks,记得在.h文件中声明
在这里插入图片描述

3.宏定义再加上portCONFIGURE_TIMER_FOR_RUN_TIME_STATS()和portGET_RUN_TIME_COUNTER_VALUE()
在这里插入图片描述

4.定义一个数组来存放任务时间信息
在这里插入图片描述
在这里插入图片描述
5.记得初始化按键
在这里插入图片描述
6.中断里面将这个时基++;
在这里插入图片描述
7.成功,就是要按下按键好久之后才会输出(发现是没有进行按键初始化)
在这里插入图片描述
/分割线**********************/
HAL库版本
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果你想获取一段时间内每个任务的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占用率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值