为什么要算
在没有操作系统的情况下粗略评估下算法的性能或者处理的速度(裸机使用率肯定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级别的,可以使用示波器来进行测量运行的时间。