这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » delay函数的时间为什么会不同

共2条 1/1 1 跳转至

delay函数的时间为什么会不同

院士
2026-03-24 19:32:24     打赏

今儿写一段代码,看看它在不同优化等级下的运行时间。先来看看我们的测试程序代码

void delay_1us(void)
{
  uint32_t i;
  for (i = 0; i < 31; i++)
  {
    __NOP();
  }
}

这段测试代码的初衷是定时延时,通过让MCU原地踏步的方式进行延时处理,比如控制DS18B20等。如果我们调试好这个延时函数,这段延时是不是就不会变了呀?我们通过实验确定一下!

我使用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的方式延时的话,注意这个优化等级的事情呀!




关键词: delay    

助工
2026-03-25 14:55:34     打赏
2楼

应该 通过汇编可以看出来  两种优化后 代码的差异


共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]