keil软件全速运行与单步调试得出的值不一样

2020-01-23 14:36发布

采样程序部分如下,
                                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采样程序从中断函数中拿出来直接放在主程序中,但是这样得到的结果还是原来的值。

烦请各位帮忙分析下是什么原因
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
12条回答
devcang
1楼-- · 2020-01-23 20:16
RESULT_temp[i]* 10;
假如RESULT_temp[i]值为74时,那结果是什么?不同的数据类型,结果略有不同。


故  数据是什么类型都不知道,没法准确判断

AD_OUT[i],猜是unsigned char的。给740,值会是什么呢。
linbin250
2楼-- · 2020-01-24 01:40
把这3行给合并了
AD_OUT[i] = RESULT_temp[i]* 10;
AD_OUT[i] =        AD_OUT[i]/80;
AD_OUT[i] = AD_OUT[i]+2;

这样测试一下!
AD_OUT[i] = (RESULT_temp[i]* 10.0/80.0+2);
hh14424
3楼-- · 2020-01-24 06:44
devcang 发表于 2014-5-22 08:26
RESULT_temp* 10;
假如RESULT_temp值为74时,那结果是什么?不同的数据类型,结果略有不同。

AD_OUT[i ]定义的是unsigned long
当为74时,最终输出值应该是11
hh14424
4楼-- · 2020-01-24 09:36
 精彩回答 2  元偷偷看……
linbin250
5楼-- · 2020-01-24 12:03
AD_OUT[i] = RESULT_temp[i]* 10;
AD_OUT[i] =        AD_OUT[i]/80;
AD_OUT[i] = AD_OUT[i]+2;

认真看了一下,先乘以10,再除以80.不就是除以8么?改成 除以8后+2不是就好了?想不明白。。。
hh14424
6楼-- · 2020-01-24 17:11
linbin250 发表于 2014-5-22 11:10
AD_OUT = RESULT_temp* 10;
AD_OUT =        AD_OUT/80;
AD_OUT = AD_OUT+2;

因为我这是拆开写了,10和80是采集到的数值,我在这里只不过是写出来了,如果用一个公式,那就是10和80

一周热门 更多>