发新帖我要提问
12
返回列表
打印
[AVR单片机]

变态的AVR-GCC优化!!!

[复制链接]
楼主: 457878
手机看帖
扫描二维码
随时随地手机跟帖
21
ershisi| | 2010-3-18 22:03 | 只看该作者 回帖奖励 |倒序浏览
20# 457878
没这么滑稽吧

使用特权

评论回复
22
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_();  // 做点什么
}

以上供大家参考

使用特权

评论回复
23
lpydidi| | 2010-4-10 20:28 | 只看该作者
for( i=0; i < 1000; ++i)
这句后面必须有语句才能达到延时吗

使用特权

评论回复
24
linjing| | 2010-4-11 19:40 | 只看该作者
for( i=0; i < 1000; ++i)
这句后面必须有语句才能达到延时吗
lpydidi 发表于 2010-4-10 20:28

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

使用特权

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

本版积分规则