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使用率的相关信息,再打印出来即可:

相关推荐
吠品14 小时前
智谱开源 ZCode 之后,真正的考试才开始
单片机·嵌入式硬件·1024程序员节
Chery114016 小时前
高速ADC与精密DAC怎么选?DP9230D与DP8532D应用解析
嵌入式硬件·物联网·射频工程
小李不想当小白19 小时前
SPI通信外设与W25Q64 (硬件SPI)(STM32标准库学习笔记)
笔记·stm32·单片机·嵌入式硬件·学习·嵌入式
LCG米19 小时前
STM32驱动W5500以太网模块实测:TCP吞吐瓶颈定位、TX指针回绕陷阱与断线重连保活落地
stm32·单片机·嵌入式硬件·tcp/ip
尼喃21 小时前
662K/65Z5三脚稳压芯片规格书—PW6566B33/B30引脚功能
嵌入式硬件
创界工坊工作室21 小时前
63-基于STC89C52霍尔传感器的智能化电能表设计
stm32·单片机·嵌入式硬件·51单片机·proteus
智购科技自动售货机厂家1 天前
让AI经营自动售货机:从Project Vend看工具权限与业务规则~YH
大数据·服务器·单片机·嵌入式硬件·深度学习
Zwawa1 天前
从 printf 到曲线:把数据送上 VOFA+
c语言·单片机·嵌入式
意法半导体STM321 天前
【官方原创】LAT6048 如何扩大MP2的A35核和M33核共享内存
stm32·单片机·嵌入式硬件·内存映射·stm32mp2
en.en..1 天前
STM32(F429)启动模式与两种烧录方式
stm32·单片机·嵌入式硬件