[AVR单片机] 变态的AVR-GCC优化!!!

[复制链接]
6375|23
ershisi 发表于 2010-3-18 22:03 | 显示全部楼层
20# 457878
没这么滑稽吧
linjing 发表于 2010-4-10 13:47 | 显示全部楼层
用430的时候遇到过这种情况
void delay( void ){
int i;
for( i=0; i < 1000; ++i)
  ;
}

void fun( void ){
....
delay();
...
}

调用的delay在最高优化的时候不见了,
很明显,编译器发现delay程序没作任何有意义的事情,所以。。。
解决办法1:
void delay( void ){
volatile  int i;  // 强制不许优化变量i
for( i=0; i < 1000; ++i)
  ;
}

解决办法2:
void delay( void ){
int i;
for( i=0; i < 1000; ++i)
  _nop_();  // 做点什么
}

以上供大家参考
lpydidi 发表于 2010-4-10 20:28 | 显示全部楼层
for( i=0; i < 1000; ++i)
这句后面必须有语句才能达到延时吗
linjing 发表于 2010-4-11 19:40 | 显示全部楼层
for( i=0; i < 1000; ++i)
这句后面必须有语句才能达到延时吗
lpydidi 发表于 2010-4-10 20:28

做点什么有意义的事,可以保证不被优化的掉
另外,记得好像是在Keil ARM的编译手册中看到过:nop嵌入指令的一个作用就是防止被优化,具体的说法记不清了,但肯定有这方面的意思
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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