FreeRTOS-CPU使用率统计

FreeRTOS-CPU使用率统计 本专栏最后一篇1. CPU利用率的基本概念CPU使用率就是系统运行的程序占用的CPU资源表示机器某段时间运行的情况。比如1000ms内一个程序A在一个CPU A上执行了1000ms另外一个程序B在另外一个CPU B上执行了100ms。那程序A任务A在这段时间内的CPU利用率就是100%程序B任务B的就是10%。FreeRTOS中多任务对CPU是分时使用的比如任务A占用10ms任务B占用30ms然后空闲60ms循环往复。那么这段时间内CPU的利用率就是40%。2. CPU利用率的作用一个系统设计的好坏用CPU使用率来衡量是一个维度。一个好的系统可以完美响应紧急事件处理并且系统的资源不会过于浪费。举个例子假设一个系统的 CPU 利用率经常在90%~100%徘徊那么系统就很少有空闲的时候这时候突然有一些事情急需 CPU的处理但是此时CPU都很可能被其他任务在占用了那么这个紧急事件就有可能无法被相应即使能被相应那么占用 CPU的任务又处于等待状态这种系统就是不够完美的因为资源处理得太过于紧迫反过来假如 CPU的利用率在1%以下那么我们就可以认为这种产品的资源过于浪费搞一个那么好的CPU去干着没啥意义的活大部分时间处于空闲状态使用作为产品的设计既不能让资源过于浪费也不能让资源过于紧迫这种设计才是完美的在需要的时候能及时处理完突发事件而且资源也不会过剩性价比更高。3. CPU利用率统计FreeRTOS是一个完善、稳定的系统提供测量各个任务占用CPU时间的接口函数可以输出每个任务占用的CPU时间从而优化整体系统。在设计产品的时候可以输出CPU利用率来优化产品但是在产品发布时就可以把这一个功能去掉了可以节省系统资源。FreeRTOS使用一个外部变量进行统计时间并消耗一个高精度的定时器定时的精度是系统时钟节拍的10-20倍比如系统时钟是1000HZ那么定时器的计数节拍就是10000-20000HZ。而且FreeRTOS进行CPU利用率统计的时候也有一定缺陷因为它不对CPU利用率统计时间的变量做溢出保护也就是说使用32位变量来作系统运行时间的计数值而按照20000HZ中断频率计算每50μs进入一次中断最大支持计数时间就是2^32 * 50μs / 3600s 59.6分钟。运行时间超过59.6分钟后统计的CPU利用率结果将不准确。想要进行CPU利用率统计需要自定义配置1、在FreeRTOSConfig.h中配置与系统运行时间和任务状态收集有关的配置选项并实现portCONFIGURE_TIMER_FOR_RUN_TIME_STATS()和portGET_RUN_TIME_COUNTER_VALUE()这两个宏定义如下然后需要实现一个中断频率位2000HZ的定时器用于系统运行时间统计其实也就是将CPU_RunTime自加这个变量是用来记录系统运行时间的中断服务函数如下然后我们就可以在任务中调用vTaskGetRunTimeStats()和vTaskList()函数获取任务相关信息与CPU使用率的相关信息再打印出来即可