为什么串口助手一直打印nan

2019-07-14 19:34发布

本帖最后由 爱在南方 于 2017-5-7 13:09 编辑

串口打印不出来,好心塞呀。我用keil调试,程序运行结果是可以的,但是用串口打印结果时,却一直给我打印出nan,有木有人遇过类似情况,可否指点一下,不甚感激呀。。。
以下是我写的GPS模块采点程序,求指点
void Data_gather(void)
{
        unsigned char i=0,j=0,k=0;
        float longtitude_sum=0,latitude_sum=0;
        float S_lon=0,S_la=0,Sum_lon=0,Sum_la=0;
        float longtitude_aver=0,latitude_aver=0;  //取均值
        flag_ok=0;
        if(Save_Data.isParseData==true&&Save_Data.isUsefull==true)
        {
                //考虑到测一点时,度是不会变的,所以只对分计算
                //先采集
                longtitude[pos_collect]=(Save_Data.longitude[3]-0x30)*10+(Save_Data.longitude[4]-0x30)*1+(Save_Data.longitude[6]-0x30)*0.1+(Save_Data.longitude[7]-0x30)*0.01+(Save_Data.longitude[8]-0x30)*0.001+(Save_Data.longitude[9]-0x30)*0.0001;
                latitude[pos_collect]=(Save_Data.latitude[2]-0x30)*10+(Save_Data.latitude[3]-0x30)+(Save_Data.latitude[5]-0x30)*0.1+(Save_Data.latitude[6]-0x30)*0.01+(Save_Data.latitude[7]-0x30)*0.001+(Save_Data.latitude[8]-0x30)*0.0001+0.0000000;
                pos_collect++;
                if(pos_collect>199) //采集完成,滤波,拉伊达准则
                {
                        pos_collect=0;
                        //求均值
                        for(i=0;i<200;i++)
                        {
                                longtitude_sum+=longtitude;
                                latitude_sum+=latitude;
                        }
                        longtitude_aver=longtitude_sum/200;
                        latitude_aver=latitude_sum/200;
                        //求方差S
                        for(i=0;i<200;i++)
                        {
                                Sum_lon+=(longtitude-longtitude_aver)*(longtitude-longtitude_aver);
                                Sum_la+=(latitude-latitude_aver)*(latitude-latitude_aver);
                        }
                        Sum_lon=Sum_lon/199;
                        Sum_la=Sum_la/199;
                        S_lon=sqrt(Sum_lon);
                        S_la=sqrt(Sum_la);
                        //判断数据是否异常
                        for(i=0;i<200;i++)
                        {
                          if(longtitude>3*S_lon)
                                {
                                         longtitude=0;
                                }
                                if(latitude>3*S_la)
                                {
                                         latitude=0;
                                }
                        }
                        //处理完毕,求均值
                        longtitude_sum=0;
                        latitude_sum=0;
                        for(i=0;i<200;i++)
                        {
                                if(longtitude!=0)
                                {
                                        j++;
                                        longtitude=(int)(longtitude*10000);//扩大10000倍,取整减小误差
                                        longtitude_sum+=longtitude;
                                }
                                if(latitude!=0)
                                {
                                        k++;
                                        latitude=(int)(latitude*10000);//扩大10000倍,取整减小误差
                                        latitude_sum+=latitude;
                                }
                         }
             longtitude_aver=longtitude_sum/(j*10000);
                         latitude_aver=latitude_sum/(k*10000);
                         //存入数组
                         Pos_longtitude[num_postion]=longtitude_aver;
                         Pos_latitude[num_postion]=latitude_aver;
                        printf("jingdu=%f",Pos_longtitude[num_postion]);
                        printf(" ");
                         printf("weidu=%f",Pos_longtitude[num_postion]);
                         printf(" "); //串口打印

                         num_postion=num_postion+1;
                         flag_ok=1;
                 }
        }
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。