怎样才能不被优化掉

[复制链接]
2345|6
 楼主| seeokok 发表于 2008-11-27 10:22 | 显示全部楼层 |阅读模式
用IAR编译下面一段程序<br />&nbsp;&nbsp;&nbsp;if&nbsp;((bh&nbsp;==&nbsp;getkey())&nbsp;&&&nbsp;(bh&nbsp;==(~getkey())))&nbsp;<br />&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;....<br />&nbsp;&nbsp;&nbsp;}else&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;....<br />&nbsp;&nbsp;&nbsp;}<br />结果发现条件为真的部分被优化掉了,以前在论坛上看到过这方面的帖子,刚才找了一下没找到,那位大虾给指点一下,谢谢。
 楼主| seeokok 发表于 2008-11-27 11:10 | 显示全部楼层

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

大虾都不在吗?<br />只好做个迷宫,把编译搞糊涂了,至少可以调试了。<br />&nbsp;&nbsp;&nbsp;&nbsp;uint8&nbsp;da1,da2,da3;<br />&nbsp;&nbsp;&nbsp;&nbsp;da1=getkey();&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;da2=getkey();<br />&nbsp;&nbsp;&nbsp;&nbsp;da3=da1;<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;((bh&nbsp;==&nbsp;da3)&&(bh&nbsp;==(~da2)))<br />&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;....<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}else&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;....<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />少了da3还不行。
wangkj 发表于 2008-11-27 11:12 | 显示全部楼层

优化掉是正确的

从程序看
 楼主| seeokok 发表于 2008-11-27 11:33 | 显示全部楼层

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

getkey()是从串口输入一个字符,我不希望被优化。<br />2楼搞错了,这样就可以:<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;da1=getkey();<br />&nbsp;&nbsp;&nbsp;&nbsp;da2=~getkey();<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;((bh&nbsp;==&nbsp;da1)&&(bh&nbsp;==da2)))<br />&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;....<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}else&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;....<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />
dld2 发表于 2008-11-27 12:34 | 显示全部楼层

变量volatile

  
Swd21ic 发表于 2008-11-29 22:34 | 显示全部楼层

re

volatile没用吧。。。。
simon21ic 发表于 2008-11-30 01:05 | 显示全部楼层

这里为什么被优化?

和getkey函数有关?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

122

帖子

1

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