我在仿真的时候发现一个问题:<br />unsigned char A,B;<br /><br />void test(void)<br />{<br /> unsigned char tmp;<br /> A=0;<br /> B=0;<br /> while(1){<br /> tmp = A - B;<br /> if(tmp > 12){<br /> //执行特殊功能<br /> //.....<br /> break;<br /> }<br /> }<br />}<br />我在中断程序中有对A进行不断加1的操作,可是永远进不去“执行特殊功能”执行并且跳出的功能,我看了汇编,似乎程序while(1)上面对A和B赋值为0后,tmp就定死是0了。中断对A的增加,在此处无效了。<br /><br />难道是被ADS编译优化掉了?搞了一天没有搞定。<br /><br />unsigned char BootPt(void)<br />{<br /> unsigned char tmp;<br /> tmp = A - B;<br /> return tmp;<br />}<br /><br />void test(void)<br />{<br /> unsigned char tmp;<br /> A=0;<br /> B=0;<br /> while(1){<br /> tmp = BootPt();<br /> if(tmp > 12){<br /> //执行特殊功能<br /> //.....<br /> break;<br /> }<br /> }<br />}<br />把程序变成这样,勉强可以使用。<br /><br />为什么会这样,求教了,急!!!!<br />在线等待中......<br /> |
|