CPU使用率

一种计算CPU使用率的方法及其实现原理
本文将以STM32F429 + FreeRTOS + KEIL为测试环境,看下MCU的使用率
1 、计算STM32使用率的官方方法在其CubeMX的固件库中
在这里插入图片描述
2、加入自己的工程
2.1、文件cpu_utils.c有描述使用的步骤
在这里插入图片描述

2.2、实操一遍
第一步:将上图中的 cpu_utils.c 文件添加到工程中,并将其头文件路径加入工程中;

第二步:打开FreeRTOST的配置头文件FreeRTOSConfig.h

开启空闲钩子函数功能 configUSE_IDLE_HOOK = 1
开启时间片钩子函数功能 configUSE_TICK_HOOK = 1
开启抢占式调度configUSE_PREEMPTION = 1 

第三步:继续在FreeRTOSConfig.h头文件的末尾处添加两个宏函数
在这里插入图片描述

第四步:在main.h头文件中加入 #include “cmsis_os.h”

第五步:在工程中任何用户代码处都可以调用osGetCPUUsage()函数来获取当前CPU的使用率
在这里插入图片描述
第六步:编译并运行测试

osCPU_Usage是在cpu_utils.c文件中定义的全局变量,表示当前CPU的使用率,是个动态值,由上图可以,CPU使用率的动态值为1%。

实际在代码中是按第六步中调用osGetCPUUsage()函数来获取当前CPU的使用率的。
至此,算法使用方法介绍完毕。

3、算法实现原理分析
操作系统运行时是不断在不同的任务间进行切换,而驱动这一调度过程是通过系统tick来驱动的,即每产生一次系统tick则检查一下当前正在运行的任务的环境判断是否需要切换任务,即调度,如果需要,则触发PendSV,通过在PendSV中断调用vTaskSwitchContext()函数来实现任务的调度。而本文所要讲述的CPU使用率算法是通过在一定时间内(1000个时间片内),计算空闲任务所占用的时间片总量,100减去空闲任务所占百分比则为工作任务所占百分比,即CPU使用率。
在这里插入图片描述
此函数为空闲任务钩子函数,每次当切换到空闲任务时就会运行此钩子函数,它的作用就是记录当前空闲任务的句柄并保存到全局变量xIdleHandle。
在这里插入图片描述
此函数为操作系统的tick钩子函数,即每次产生系统tick中断都会进入到此钩子函数。此钩子函数实际上就是具体计算CPU使用率的算法了。osCPU_TotalIdleTime是一个全局变量,表示在1000个tick时间内空闲任务总共占用的时间片,CALCULATION_PERIOD宏的值为1000,即每1000个tick时间内重新计算一次CPU的使用率。

下面两个函数就是如何计算osCPU_TotalIdleTime的:
在这里插入图片描述
这两个函数是调度器钩子函数,在调度器进行任务切进和切出时分别回调,StartIdleMonitor()函数记录切换到空闲任务时的时间点,EndIdleMonitor()则在退出空闲任务时计算此次空闲任务花费多长时间,并累加到osCPU_TotalIdleTime,即空闲任务总共占用的时间片。
在这里插入图片描述
全局变量osCPU_Usage保存的就是CPU的使用率,它是在操作系统的tick钩子函数中每隔1000个tick就被重新计算一次。

4、结论
通过此方法可以很好的用来评估STM32 MCU的运行性能。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值