CPU利用率的基本概念
CPU使用率其实就是系统运行的程序占用的CPU资源,表示机器在某段时间程序运行 的情况。
一个系统设计的好坏,可以使用CPU使用率来衡量,一个好的系统必然是能完美响应 急需的处理,并且系统的资源不会过于浪费(性价比高)。
相关配置
配置时间基准
FreeRTOS 是使用一个外部的变量进行统计时间的,并且消耗一个高精度的定时器,其用于定时的精度是系统时钟节拍的10-20倍。
需要实现一个中断频率为系统时钟节拍的10-20倍的定时器,用于系统运行时间统计,其实很简单, 只需将CPU_RunTime变量自加即可,这个变量是用于记录系统运行时间的。
在定时器中断任务中,只需要让变量一直++就可以。
宏定义
(需要实现5个宏定义,三个相关功能定义的配置,两个自己手动配置)
然后我们就可以在任务中调用vTaskGetRunTimeStats()和vTaskList()函数获得任务的相关信息与CPU使用率的相关信息,然后打印出来即可。
使用 vTaskGetRunTimeStats()函数需要将宏 configGENERATE_RUN_TIME_STATS、configUSE_TRACE_FACILITY 及 configUSE_STATS_FORMATTING_FUNCTIONS都设置为1,
同时用户还需在FreeRTOSConfig.h头文件中实现如下两个宏。
- pOrtCONFIGURE_TIMIER_FOR_RUN_TIMESTATS():用于初始化任务运行时间信息统计功能的时间基准。时间基准一般使用定时器来提供,并且要求这个定时器的精度是系统时钟节拍精度的10倍以上。
- portGET_RUN_TIME_COUNTER_VALUE():用于获取统计任务运行时间信息的计数器值,利用这个计数值来计算各任务运行时间百分比。
注意 :使用vTaskGetRunTimeStats()函数会降低系统的实时性。一般用于代码调式阶段。
运行
定义一个足够大的数组,调用函数vTaskList();,数组作为参数返回任务名,任务状态,优先级,剩余栈,任务序号等信息。
定义一个足够大的数组,调用函数 vTaskGetRunTimeStats();,数组作为参数返回任务名,运行计数,使用率等信息。
直接打印出来即可。