下面两段delay函数的区别

[复制链接]
 楼主| 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

粉丝
快速回复 在线客服 返回列表 返回顶部