keil软件调试程序,全速运行与但不运行结果值不一样

2019-07-15 19:38发布

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

烦请各位帮忙分析下是什么原因
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
bigbigmule
1楼-- · 2019-07-15 22:50
 精彩回答 2  元偷偷看……
依然落叶飘零
2楼-- · 2019-07-16 04:47
断点运行试试,可能是AD转换时间不足,或者串口有问题,都有可能。
bdj420
3楼-- · 2019-07-16 05:50
依然落叶飘零 发表于 2014-5-21 18:52
断点运行试试,可能是AD转换时间不足,或者串口有问题,都有可能。

串口输出没有问题,因为我发现有几次输出值是正确的,但之后就一直错误
AD采样部分我也是有加过输出部分也有加过延时处理,也不起作用
bdj420
4楼-- · 2019-07-16 09:19
bigbigmule 发表于 2014-5-21 17:34
你的AD采集的应该是传感器的输出值吧??试着在调用AD采集程序之前,做些简单的延时(延时自己把握一下), ...

AD采集的是电位器的值
AD采样函数调用时的延时处理也有做过,但是不起作用
bigbigmule
5楼-- · 2019-07-16 09:28
bdj420 发表于 2014-5-22 10:27
AD采集的是电位器的值
AD采样函数调用时的延时处理也有做过,但是不起作用
...

应该是AD采集时间的问题,首先在单步运行时可以采集到数值,那么就说明了AD采集程序是正确的,全速运行结果不对。单步调试与全速运行的区别主要就是时间上。由于并没有详细见到你的程序,你试试全速运行只在你所贴的代码中设置一个断点,观察是否进入了这个判断。还有一个就是采集的数据最好进行一下软件滤波再进入这个判断

一周热门 更多>