这个程序怎么了????

[复制链接]
 楼主| win2000_li 发表于 2009-6-3 09:48 | 显示全部楼层 |阅读模式
INT8U&nbsp;CheckSum(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;INT8U&nbsp;&nbsp;ChVa&nbsp;=&nbsp;SetZero;<br />&nbsp;&nbsp;&nbsp;&nbsp;INT8U&nbsp;&nbsp;SUM&nbsp;&nbsp;=&nbsp;SetZero;<br />&nbsp;&nbsp;&nbsp;&nbsp;INT8U&nbsp;&nbsp;Tmp2&nbsp;=&nbsp;SetZero;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;INT16U&nbsp;Temp1&nbsp;=&nbsp;SetZero;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;Temp1&nbsp;&nbsp;=&nbsp;0x15;<br />&nbsp;&nbsp;&nbsp;&nbsp;Temp1&nbsp;+=&nbsp;0xf8;<br />&nbsp;&nbsp;&nbsp;&nbsp;Temp1&nbsp;+=&nbsp;0x66;<br />&nbsp;&nbsp;&nbsp;&nbsp;Temp1&nbsp;+=&nbsp;0x12;<br />&nbsp;&nbsp;&nbsp;&nbsp;Temp1&nbsp;+=&nbsp;0x03;<br />&nbsp;&nbsp;&nbsp;&nbsp;/*<br />&nbsp;&nbsp;&nbsp;&nbsp;Tmp1&nbsp;+=&nbsp;RKE_FIFO_DATA[0]&nbsp;&&nbsp;0x00ff;<br />&nbsp;&nbsp;&nbsp;&nbsp;Tmp1&nbsp;+=&nbsp;(RKE_FIFO_DATA[0]&nbsp;&&nbsp;0xff00)&nbsp;&gt&gt&nbsp;8;<br />&nbsp;&nbsp;&nbsp;&nbsp;Tmp1&nbsp;+=&nbsp;RKE_FIFO_DATA[1]&nbsp;&&nbsp;0x0003;<br />&nbsp;&nbsp;&nbsp;&nbsp;Tmp1&nbsp;+=&nbsp;(RKE_FIFO_DATA[1]&nbsp;&&nbsp;0xff00)&nbsp;&gt&gt&nbsp;8;<br />&nbsp;&nbsp;&nbsp;&nbsp;Tmp1&nbsp;+=&nbsp;RKE_FIFO_DATA[2]&nbsp;&&nbsp;0x00ff;<br />&nbsp;&nbsp;&nbsp;&nbsp;Tmp1&nbsp;+=&nbsp;(RKE_FIFO_DATA[2]&nbsp;&&nbsp;0xff00)&nbsp;&gt&gt&nbsp;8;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;Tmp2&nbsp;=&nbsp;(INT8U)(Tmp1&nbsp;&&nbsp;0x00ff&nbsp;+&nbsp;(Tmp1&nbsp;&&nbsp;0xff00)&nbsp;&gt&gt&nbsp;8);<br />&nbsp;&nbsp;&nbsp;&nbsp;SUM&nbsp;&nbsp;=&nbsp;(2&nbsp;&lt&lt&nbsp;Tmp2)&nbsp;+&nbsp;Tmp2&nbsp;&&nbsp;0xfc;<br />&nbsp;&nbsp;&nbsp;&nbsp;ChVa&nbsp;=&nbsp;(INT8U)(RKE_FIFO_DATA[1]&nbsp;&&nbsp;0x00fc);<br />&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;/*if&nbsp;(SUM&nbsp;==&nbsp;ChVa)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;(TRUE);<br />&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;(FALSE);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />}<br /><br />为什么这个程序不执行上面的加法运算呢????<br />
张明峰 发表于 2009-6-3 10:18 | 显示全部楼层

被优化掉了

你做了一连串的Temp1加,到最后Temp1根本就没有发挥作用。编译器一看,这不是白干么?删了得了。
 楼主| win2000_li 发表于 2009-6-3 10:30 | 显示全部楼层

这是我的测试程序.大家帮我看一看.

#include&nbsp;&lthidef.h&gt&nbsp;/*&nbsp;for&nbsp;EnableInterrupts&nbsp;macro&nbsp;*/<br />#include&nbsp;&quot;derivative.h&quot;&nbsp;/*&nbsp;include&nbsp;peripheral&nbsp;declarations&nbsp;*/<br /><br /><br />unsigned&nbsp;int&nbsp;abc[3]&nbsp;=&nbsp;<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;0xf815,&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;0x666b,<br />&nbsp;&nbsp;&nbsp;&nbsp;0x0038<br />};<br /><br />unsigned&nbsp;char&nbsp;CheckSum(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;int&nbsp;Temp1&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;Temp2&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;Temp1&nbsp;&nbsp;=&nbsp;(abc[0]&nbsp;&&nbsp;0x00ff)&nbsp;+&nbsp;((abc[0]&nbsp;&&nbsp;0xff00)&nbsp;&gt&gt&nbsp;8);<br />&nbsp;&nbsp;&nbsp;&nbsp;Temp1&nbsp;+=&nbsp;(abc[1]&nbsp;&&nbsp;0x0003)&nbsp;+&nbsp;((abc[1]&nbsp;&&nbsp;0xff00)&nbsp;&gt&gt&nbsp;8);<br />&nbsp;&nbsp;&nbsp;&nbsp;Temp1&nbsp;+=&nbsp;(abc[2]&nbsp;&&nbsp;0x00ff)&nbsp;+&nbsp;((abc[2]&nbsp;&&nbsp;0xff00)&nbsp;&gt&gt&nbsp;8);<br />&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;Temp2&nbsp;=&nbsp;(Temp1&nbsp;&&nbsp;0x00ff)&nbsp;+&nbsp;((Temp1&nbsp;&&nbsp;0xff00)&nbsp;&gt&gt&nbsp;8);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;(Temp2);&nbsp;&nbsp;&nbsp;&nbsp;<br />}<br /><br /><br />void&nbsp;main(void)&nbsp;<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;c&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;for(;;)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c&nbsp;=&nbsp;CheckSum();<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br />
 楼主| win2000_li 发表于 2009-6-3 10:31 | 显示全部楼层

现在这个也不对头.

这里的Temp1不会也被优化吧!!!!!
 楼主| win2000_li 发表于 2009-6-3 10:59 | 显示全部楼层

真的是被优化了.

#include&nbsp;&lthidef.h&gt&nbsp;/*&nbsp;for&nbsp;EnableInterrupts&nbsp;macro&nbsp;*/<br />#include&nbsp;&quot;derivative.h&quot;&nbsp;/*&nbsp;include&nbsp;peripheral&nbsp;declarations&nbsp;*/<br /><br />unsigned&nbsp;char&nbsp;c&nbsp;=&nbsp;0;<br />unsigned&nbsp;char&nbsp;Sum&nbsp;=&nbsp;0;<br />unsigned&nbsp;char&nbsp;Tes&nbsp;=&nbsp;0;&nbsp;<br />unsigned&nbsp;char&nbsp;Cmp&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />unsigned&nbsp;int&nbsp;abc[3]&nbsp;=&nbsp;<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;0xf815,&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;0x666b,<br />&nbsp;&nbsp;&nbsp;&nbsp;0x0038<br />};<br /><br />unsigned&nbsp;char&nbsp;CheckSum(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;int&nbsp;Temp1&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;Temp2&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;Temp1&nbsp;&nbsp;=&nbsp;(abc[0]&nbsp;&&nbsp;0x00ff)&nbsp;+&nbsp;((abc[0]&nbsp;&&nbsp;0xff00)&nbsp;&gt&gt&nbsp;8)&nbsp;+&nbsp;(abc[1]&nbsp;&&nbsp;0x0003)&nbsp;+&nbsp;((abc[1]&nbsp;&&nbsp;0xff00)&nbsp;&gt&gt&nbsp;8)&nbsp;+&nbsp;(abc[2]&nbsp;&&nbsp;0x00ff)&nbsp;+&nbsp;((abc[2]&nbsp;&&nbsp;0xff00)&nbsp;&gt&gt&nbsp;8);<br />&nbsp;&nbsp;&nbsp;&nbsp;Temp2&nbsp;=&nbsp;(Temp1&nbsp;&&nbsp;0x00ff)&nbsp;+&nbsp;((Temp1&nbsp;&&nbsp;0xff00)&nbsp;&gt&gt&nbsp;8);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;Sum&nbsp;&nbsp;&nbsp;=&nbsp;(Temp2&nbsp;&&nbsp;0xfc)&nbsp;+&nbsp;(Temp2&nbsp;&lt&lt&nbsp;2);&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;Cmp&nbsp;&nbsp;&nbsp;=&nbsp;abc[1]&nbsp;&&nbsp;0x00fc;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(Cmp&nbsp;==&nbsp;Sum)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;(TRUE);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;(FALSE);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br /><br />void&nbsp;main(void)&nbsp;<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;for(;;)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c&nbsp;=&nbsp;CheckSum();<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br />这样终于可以.解决了.谢谢老师,就是那里的问题....<br /><br />
张明峰 发表于 2009-6-3 11:52 | 显示全部楼层

上面的代码应该没问题

但Temp1的部分赋值操作被优化了。<br />不要老想着编译器有问题。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

142

主题

718

帖子

1

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

142

主题

718

帖子

1

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