如何计算裸机单片机CPU使用率

本文探讨了如何通过1ms定时器和IO口状态监控来估算单片机CPU的使用率,强调了中断嵌套的重要性,并提出提高精度的方法,如事件时间需超过1ms。同时,作者还提及了利用示波器进行更精细的时间测量的可能性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

为什么要算

在没有操作系统的情况下粗略评估下算法的性能或者处理的速度(裸机使用率肯定100%)

前提

程序设计是按照状态机或者大循环(即设计的程序框架是方便统计的)

设计思路

使用一个1ms的定时器,使用此定时器需要确保可以进行中断嵌套
在主轮询或者中断的时候,即有事件发生的时候,将某一个标志量置1,空闲,置0(我这里是通过将一个IO口置0,代表忙,1代表空闲),在1ms定时器里判断是否为1或者0,当计时到1000的时候判断1和0的比例即可判断出单片机CPU的使用率。
可供参考的程序如下

Uint32 count_ON=0,count_OFF=0,count_s=0;
interrupt void CpuTimer2_ISR(void){
    EALLOW;
        if(GpioDataRegs.GPBDAT.bit.GPIO49 == 1){
            count_ON++;
        }
        if(GpioDataRegs.GPBDAT.bit.GPIO49 == 0){
            count_OFF++;
        }
    count_s++;
    if(count_s>1000){
        count_s=0;
        cpu_utilze = (count_OFF*100)/(count_ON+count_OFF);
        count_OFF=0;
        count_ON=0;
    }
    EDIS;
}

评估

1、如果定时器设置为1ms,在这1ms的时间,发生了0.5ms的事件,那么将不会统计到,所以希望事件的发生时间在2ms以上
在这里插入图片描述
2、如果有段程序运行期间关了所有中断,只能通过人为累加
3、一般只要保持事件在1ms以上,允许中断嵌套,是可以通过此种方法进行估算

更加准确的验证

想要更进一步的验证单片机运行的时间可以像我上面那样测量引脚的电平变化,一般IO口的翻转是ns级别的,可以使用示波器来进行测量运行的时间。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值