KEIL调试过程中出现的问题

用KEIL编写STC89C52RC编写的C语言程序。在程序编写完成后,经过编译和创建目标函数后,显示没有错误,有两个警告,但是在调试过程中出现了以下问题:还望高手能指出

在调试过程中,用单步执行,其中263、267、272、277、282语句没有执行,而是直接跳过,这是怎么回事,该怎么解决?我在度娘上搜索说的是代码优化级别太高。KEIL默认是8级,我依次修改优先级,依然是上面的问题。我这问题出在什么地方 该怎么修改? 回答到点子上的 可以追加分
我在网上下载了注册机的 使用时间到2016年的。 我编写了再100行以内的程序 完全能够执行没有任何问题。但是编译后调试上面的程序就出现问题

s 的数值是多少?

如果,它大于 0xea,那么,262、266...281,这些条件语句,

就都不满足条件。

当然,也就不会执行 263、267、272、277、282 语句。

这和代码优化级别,无关。追问

S是通过ADC0832模数转换得到的数值 S会随着模拟量的变化而变化的。

追答

在执行你给出的这些语句时,s 是一个确定的数值,是不变的。

s 的数值是多少?
你可以用:P1 = s;,当场看看其数值,究竟是多少。

追问

s=0x70或s=0x7b 还有几个数值没有测试,我觉得不该是这个s值的问题,因为在用KEIL调试的过程中s的值一直是0x00;在调试中能够执行if(s>=0x62),也能执行sw1=0;然后执行if(s=0x93);sw2=0;然后执行if(s<=0x92),然后又跳过sw2=1; 依次类推。

追答

因为在用KEIL调试的过程中s的值一直是0x00;

----
00?
00是怎么来的,你又是怎么知道它是00?

你把这一句:
s = AD_result; //模数转换得到的数值,随着模拟量变化

改成:
s = 0x70; //随便改成一个明确且固定的值

其它不变。

然后,再看以下的各个条件语句,应该执行的分支,是否执行了。

温馨提示:内容为网友见解,仅供参考
第1个回答  2014-09-06
也不能埋怨代码优化级别太高。像你这种平铺直叙的程序,很容易被优化到面目全非的。
调试的时候应当跟踪汇编代码为主。跟踪源代码,并不切合实际。本回答被网友采纳
相似回答