keil软件全速运行结果与单步调试得到的结果不相同

采样程序部分如下,
if(8<=RESULT_temp[i]<=80)
{
AD_OUT[i] = RESULT_temp[i]* 10;
AD_OUT[i] = AD_OUT[i]/80;
AD_OUT[i] = AD_OUT[i]+2;
AL_AD_OUT[i] = RESULT_temp[i];
}

在用keil软件编译时,程序全速运行时,假如RESULT_temp[i]值为74时,串口输出的AD_OUT[i]的值却为6,这显然是不正确的,还有不论有没有AD_OUT[i] = AD_OUT[i]+2; 这条程序,AD_OUT[i] 的值一直是6,即AD_OUT[i] = AD_OUT[i]+2 这条指令根本没起作用。但是当我单步调试此段程序时,AD_OUT[i]依次得到的数值为740,9,11;
单步调试的结果都正确,全速运行得到的却是错误结果,我的AD采样程序是放在中断函数中每隔3ms采样一次,本来觉得是采样中断与主程序的定时中断冲突了,就把AD采样程序从中断函数中拿出来直接放在主程序中,但是这样得到的结果还是原来的值。

烦请各位帮忙分析下是什么原因

首先,if(8<=RESULT_temp[i]<=80)不符合C语言标准写法,可能不是你想要的结果。

应该写成:
if((8<=RESULT_temp[i]) && (RESULT_temp[i]<=80))追问

这个之前试过了,不起作用的

追答

其次,单步运行的时候很慢,全速运行的时候很快。可能采集还没有完成。

温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答