今儿写一段代码,看看它在不同优化等级下的运行时间。先来看看我们的测试程序代码
void delay_1us(void)
{
uint32_t i;
for (i = 0; i < 31; i++)
{
__NOP();
}
}我使用STM32F407为测试环境来验证。这段代码的运行时间,我们使用systick的counter计数值来测量——因为一个counter代表MCU的主频一个周期。测量时间代码的源程序如下:
reg_tbl[0] = SysTick->VAL; delay_1us(); reg_tbl[1] = SysTick->VAL; reg_tbl[2] = reg_tbl[0] - reg_tbl[1];
我们可以运行上述程序,并通过内存查看reg_tbl[2]的数值即可判断出来其运行的时间。

上图是Keil的优化等级为O0下编译并在flash中运行的时间间隔。

上图是Keil的优化等级为O3下编译并在flash中运行的时间间隔。
通过两张图片我们可以清楚看出,Keil通过优化等级的设定改变了延时函数的运行时间。
各位坛友们,如果使用nop的方式延时的话,注意这个优化等级的事情呀!
我要赚赏金
