keil软件全速运行与单步调试得出的值不一样
采样程序部分如下,if(8<=RESULT_temp<=80)
{
AD_OUT = RESULT_temp* 10;
AD_OUT = AD_OUT/80;
AD_OUT = AD_OUT+2;
AL_AD_OUT = RESULT_temp;
}
在用keil软件编译时,程序全速运行时,假如RESULT_temp值为74时,串口输出的AD_OUT的值却为6,这显然是不正确的,还有不论有没有AD_OUT = AD_OUT+2; 这条程序,AD_OUT 的值一直是6,即AD_OUT = AD_OUT+2 这条指令根本没起作用。但是当我单步调试此段程序时,AD_OUT依次得到的数值为740,9,11;
单步调试的结果都正确,全速运行得到的却是错误结果,我的AD采样程序是放在中断函数中每隔3ms采样一次,本来觉得是采样中断与主程序的定时中断冲突了,就把AD采样程序从中断函数中拿出来直接放在主程序中,但是这样得到的结果还是原来的值。
烦请各位帮忙分析下是什么原因 RESULT_temp* 10;
假如RESULT_temp值为74时,那结果是什么?不同的数据类型,结果略有不同。
故数据是什么类型都不知道,没法准确判断
AD_OUT,猜是unsigned char的。给740,值会是什么呢。 把这3行给合并了
AD_OUT = RESULT_temp* 10;
AD_OUT = AD_OUT/80;
AD_OUT = AD_OUT+2;
这样测试一下!
AD_OUT = (RESULT_temp* 10.0/80.0+2); devcang 发表于 2014-5-22 08:26
RESULT_temp* 10;
假如RESULT_temp值为74时,那结果是什么?不同的数据类型,结果略有不同。
AD_OUT定义的是unsigned long
当为74时,最终输出值应该是11 linbin250 发表于 2014-5-22 08:50
把这3行给合并了
AD_OUT = RESULT_temp* 10;
AD_OUT = AD_OUT/80;
合并在一起计算过了,不起作用,我定义的是长整型,不是需要输出小数 AD_OUT = RESULT_temp* 10;
AD_OUT = AD_OUT/80;
AD_OUT = AD_OUT+2;
认真看了一下,先乘以10,再除以80.不就是除以8么?改成 除以8后+2不是就好了?想不明白。。。 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 问题解决了没? if(8<=RESULT_temp<=80) 这句写法有问题,不管RESULT_temp是什么值,计算结果都是true
8 <= RESULT_temp && RESULT_temp <= 80 if(RESULT_temp >=8 &RESULT_temp<=80)试试这个 我遇到过全速运行芯片发生硬件错误,死掉了,单步不会死,M0内核的芯片,没搞清楚为什么0 我也碰到过这种情况,但是一般加延时就搞定了,因为单步调试,实际上的情况是人为在断点后面加进去了延时;
PS :至于为啥加了延时就好,得具体分析啦! 目测if语句问题,10楼少了个&
页:
[1]