281229961 发表于 2012-11-23 21:54:01

mega64 数据开方出问题,求帮助

uint uo;       
ad_run()
{
       float squ;
       double squad=0,a;
   int k;
       for(k=0;k<20;k++)       
       {
                uo=ad;
                squ=uo;                //强制把采得的数据量转换成双精度数,以便运算
                squ=squ*5/1023;                //把每点的数据转换成实际数据
                a=squ*squ;                        //求一点电压的平方
                squad=squad+a;
       }
       squad=squad/20;
       uo=squad*100;
       uo=sqrt(uo);
}仿真时执行完squad=squad/20;后
squad值为5.87。。。。
执行完uo=squad*100;后
uo值为587
执行完uo=sqrt(uo);问题出现了
uo的值为65536或者其他乱七八糟的很大的值;
问题在哪呢??


yklstudent 发表于 2012-11-23 22:40:03

仿真试了试 发现没问题的 可以得出正确结果的

281229961 发表于 2012-11-24 00:23:21

我仿真 也出错,直接运行 也出错! 蛋疼了啊 。反正就是开方运算后的结果就不对了 ,前面的结果都是正确的 。
不会是单片机坏了吧。。。

NemoGu 发表于 2012-11-24 02:41:50

数据类型不匹配

i55x 发表于 2012-11-24 07:02:43

第一句就错了,应该是float uo

281229961 发表于 2012-11-24 11:52:27

NemoGu 发表于 2012-11-24 02:41 static/image/common/back.gif
数据类型不匹配

应该如何改呢

281229961 发表于 2012-11-24 11:53:01

i55x 发表于 2012-11-24 07:02 static/image/common/back.gif
第一句就错了,应该是float uo

改成float了还是不行 !只要开方之后就出错

281229961 发表于 2012-11-24 12:13:20

281229961 发表于 2012-11-24 12:17:32

编译器是ICCAVR仿真是AVRStudio

yklstudent 发表于 2012-11-24 12:42:43

我用GCC软件仿真时没问题的
结果如下:

281229961 发表于 2012-11-24 14:08:23

问题,找到了。是我SB。忘记加math.h了。
哎。。。。ICCAVR居然不报错
页: [1]
查看完整版本: mega64 数据开方出问题,求帮助