OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3638|回复: 3

我感觉原子这段GPS NEO-6例程写错了吧,请帮我看看。

[复制链接]

1

主题

6

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2017-8-11
在线时间
12 小时
发表于 2017-8-21 17:14:08 | 显示全部楼层 |阅读模式
本帖最后由 yanzerui123 于 2017-8-21 17:16 编辑

//str 转换为数字,以','或者'*'结束
//buf:数字存储区
//dx:小数点位数,返回给调用函数
//返回值:转换后的数值
int NMEA_Str2num(u8 *buf,u8*dx)
{
u8 *p=buf;
u32 ires=0,fres=0;
u8 ilen=0,flen=0,i;
u8 mask=0;
int res;
while(1) //得到整数和小数的长度
{
if(*p=='-'){mask|=0X02;p++;}//是负数
if(*p==','||(*p=='*'))break;//遇到结束了
if(*p=='.'){mask|=0X01;p++;}//遇到小数点了
else if(*p>'9'||(*p<'0')) //有非法字符
{
ilen=0;
flen=0;
break;
}
if(mask&0X01)flen++;
else ilen++;
p++;

}
if(mask&0X02)buf++; //去掉负号
for(i=0;i<ilen;i++) //得到整数部分数据
{
ires+=NMEA_Pow(10,ilen-1-i)*(buf-'0');
}
if(flen>5)flen=5; //最多取 5 位小数
*dx=flen; //小数点位数
for(i=0;i<flen;i++) //得到小数部分数据
{
fres+=NMEA_Pow(10,flen-1-i)*(buf[ilen+1+i]-'0');
}
res=ires*NMEA_Pow(10,flen)+fres;
if(mask&0X02)res=-res;
return res;
}
标红这句应该是res=ires+fres/NMEA_Pow(10,flen);


//m^n 函数//返回值:m^n 次方.
u32 NMEA_Pow(u8 m,u8 n)
{
u32 result=1;
while(n--)result*=m;
return result;
}

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2017-8-11
在线时间
12 小时
 楼主| 发表于 2017-8-21 23:04:40 | 显示全部楼层
红色那段难道不是把429.1这个字符串转换成了 429*10+0.1=4290.1了么?
回复 支持 反对

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2017-8-11
在线时间
12 小时
 楼主| 发表于 2017-8-21 23:27:12 | 显示全部楼层
temp=NMEA_Str2num(p1+posx,&dx)/NMEA_Pow(10,dx);//得到 UTC 时间
gpsx->utc.hour=temp/10000;
gpsx->utc.min=(temp/100)%100;
gpsx->utc.sec=temp%100;

这几句获取UTC时间却又除以了10的小数个数次方???
回复 支持 反对

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2017-8-11
在线时间
12 小时
 楼主| 发表于 2017-8-22 09:31:24 | 显示全部楼层
没错,以后还有特殊处理。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-18 16:23

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表