打印

下面两段delay函数的区别

[复制链接]
1805|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jweiok|  楼主 | 2012-10-15 10:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 jweiok 于 2012-10-15 10:41 编辑

void Dly100us(void *arg)
{
  Int32U Dly = (Int32U)arg;
  while(Dly--)

  {

     for(volatile int i = LOOP_DLY_100US; i; i--);

  }

}

Void Dly100us(Int32U Dly)
{
  Int i;

  While(Dly--)

  {  
    For(i= LOOP_DLY_100US; i; i--);
  }
}
前者是在一段例程上看到的写法,后者是我自己的写法
请问,前者中函数的形参使用指针、在for中使用volatile变量具体有何用意

相关帖子

沙发
hwk612167| | 2012-10-15 20:53 | 只看该作者
你那种写法不加volatile,经不起优化,优化等级高些你的延时就优化没了

使用特权

评论回复
板凳
阿南| | 2012-10-15 22:48 | 只看该作者
楼主可以利用你使用的编译器,将两段延时分别编译再查看他们的汇编代码来分析他们的高效及合理性。
Int32U Dly作为参数时汇编生成的代码应该没有指针高效,具体也要看编译器。
而for 中如果i不加volatile时编译器可能会认为是无用代码将其优化,可能会对i只判断一次。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:人要适当改变自己!

34

主题

815

帖子

0

粉丝