打印

请各位帮忙分析下 功能一样的代码为什么写法不同结果会不同

[复制链接]
887|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
a3724395|  楼主 | 2017-7-23 13:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
功能是:幅度是2--4的正弦波通过AD0832连接到单片机,要求读这个正弦波的峰值。
做法是:每5ms进行AD采样时读五次,去掉最大值和最小值剩下的三个取平均值,作为这一次的采样值;
采三次,如果第二次大于第一次和第三次,第二次就是峰值。

关键的是取平均值是这步,如果用下面这个算法proteus仿真就能读出峰值是 4。
sum=((pluse[0]+pluse[1]+pluse[2]+pluse[3]+pluse[4]-max-min)/3);
如果用下面分开写,峰值读出来是一点多,就不正确。
  sum=(pluse[0]+pluse[1]+pluse[2]+pluse[3]+pluse[4]);
  sum=sum-max-min;
  sum=sum/3;  

功能应该是一样的,为什么结果 会不一样呢

相关帖子

沙发
simonliu009| | 2017-7-23 13:53 | 只看该作者
本帖最后由 simonliu009 于 2017-7-23 13:55 编辑

建议两个算法都打印输出一下每个变量,包含pluse[x]和max,min
看看是否有不同还有三次平均值取最大值的算法是否有差别啊,都需要看一下。

使用特权

评论回复
板凳
mcu5i51| | 2017-7-23 14:36 | 只看该作者
好像你说的不正确的算法是对的

使用特权

评论回复
地板
dirtwillfly| | 2017-7-23 20:04 | 只看该作者
追踪一下sum的变化,或者看看生成的汇编代码

使用特权

评论回复
5
bb632639228| | 2017-7-24 11:54 | 只看该作者
估计是数据类型的问题,你可以将sum改为更宽的数据类型试试。

使用特权

评论回复
6
yichunshan| | 2017-7-24 13:36 | 只看该作者
数据类型是什么?

使用特权

评论回复
7
a3724395|  楼主 | 2017-7-25 22:39 | 只看该作者
bb632639228 发表于 2017-7-24 11:54
估计是数据类型的问题,你可以将sum改为更宽的数据类型试试。

高手啊,本来是char,改成int就好了,谢谢
难道是“sum=(pluse[0]+pluse[1]+pluse[2]+pluse[3]+pluse[4]);”这句超出了?还是程序认为可能超出所以乱码?

使用特权

评论回复
8
linqing171| | 2017-7-26 16:04 | 只看该作者
c语言标准有个术语叫做整形提升。

使用特权

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

本版积分规则

29

主题

134

帖子

1

粉丝