打印

怎样才能不被优化掉

[复制链接]
1709|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
seeokok|  楼主 | 2008-11-27 10:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用IAR编译下面一段程序
   if ((bh == getkey()) && (bh ==(~getkey()))) 
   {    
         ....
   }else {
         ....
   }
结果发现条件为真的部分被优化掉了,以前在论坛上看到过这方面的帖子,刚才找了一下没找到,那位大虾给指点一下,谢谢。

相关帖子

沙发
seeokok|  楼主 | 2008-11-27 11:10 | 只看该作者

先弯弯绕一下,起码能调试了

大虾都不在吗?
只好做个迷宫,把编译搞糊涂了,至少可以调试了。
    uint8 da1,da2,da3;
    da1=getkey(); 
    da2=getkey();
    da3=da1;
    if ((bh == da3)&&(bh ==(~da2)))
    {    
         ....
     }else {
         ....
    }
少了da3还不行。

使用特权

评论回复
板凳
wangkj| | 2008-11-27 11:12 | 只看该作者

优化掉是正确的

从程序看

使用特权

评论回复
地板
seeokok|  楼主 | 2008-11-27 11:33 | 只看该作者

有没有禁止这段被优化的办法?

getkey()是从串口输入一个字符,我不希望被优化。
2楼搞错了,这样就可以:

    da1=getkey();
    da2=~getkey();
    if ((bh == da1)&&(bh ==da2)))
    {    
         ....
     }else {
         ....
    }

使用特权

评论回复
5
dld2| | 2008-11-27 12:34 | 只看该作者

变量volatile

使用特权

评论回复
6
Swd21ic| | 2008-11-29 22:34 | 只看该作者

re

volatile没用吧。。。。

使用特权

评论回复
7
simon21ic| | 2008-11-30 01:05 | 只看该作者

这里为什么被优化?

和getkey函数有关?

使用特权

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

本版积分规则

11

主题

122

帖子

1

粉丝