打印
[C语言]

keil软件编程公式运算问题

[复制链接]
2035|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
bdj420|  楼主 | 2014-5-21 11:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
采样程序部分如下,
                                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采样程序从中断函数中拿出来直接放在主程序中,但是这样得到的结果还是原来的值。

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

相关帖子

沙发
ayb_ice| | 2014-5-21 11:40 | 只看该作者
本帖最后由 ayb_ice 于 2014-5-21 11:43 编辑

        if(8<=RESULT_temp && RESULT_temp<=80)

另外怀疑有问题可以禁止中断,用虚拟的ADC结果测试算法

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
bdj420 + 1
板凳
bdj420|  楼主 | 2014-5-21 11:46 | 只看该作者
ayb_ice 发表于 2014-5-21 11:40
if(8

不是这个原因,全速运行结果还是一样。我觉得既然单步调试正确了,就不应该是公式编写的问题了吧

使用特权

评论回复
地板
bdj420|  楼主 | 2014-5-21 11:52 | 只看该作者
ayb_ice 发表于 2014-5-21 11:40
if(8

我已经把采样程序从中断中提出来了,直接在main函数中运行,并无参与中断,还是不行的

使用特权

评论回复
5
ayb_ice| | 2014-5-21 13:33 | 只看该作者
你这很有可能是数组索引越界了

使用特权

评论回复
6
bdj420|  楼主 | 2014-5-21 14:29 | 只看该作者
帮自己顶一下!!!

使用特权

评论回复
7
elvsf2| | 2014-5-21 17:48 | 只看该作者
if(8<=RESULT_temp[i]<=80)   这个不对

使用特权

评论回复
8
bdj420|  楼主 | 2014-5-22 10:33 | 只看该作者
elvsf2 发表于 2014-5-21 17:48
if(8

这个写法已经改正过了,但还是不行

使用特权

评论回复
9
elvsf2| | 2014-5-22 16:14 | 只看该作者
bdj420 发表于 2014-5-22 10:33
这个写法已经改正过了,但还是不行

1、前面有人说了数组越界。
2、会不会在这个条件判断之前,RESULT_temp值就不对了?比如全速运行时AD值不对
3、你这提供的信息有点少

使用特权

评论回复
10
bdj420|  楼主 | 2014-5-26 13:07 | 只看该作者
elvsf2 发表于 2014-5-21 17:48
if(8

问题已解决,首先是你说的这个范围书写问题,再有就是还涉及到了正负号判断没有处理好,谢谢了

使用特权

评论回复
11
bdj420|  楼主 | 2014-5-26 13:07 | 只看该作者
谢谢各位,问题已经解决!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

20

主题

139

帖子

0

粉丝