OpenEdv-开源电子网

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

GPS模块中GPGSV处理中的len=p1[7]-'0';没弄明白具体什么意思

[复制链接]

6

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
89
金钱
89
注册时间
2021-7-27
在线时间
28 小时
发表于 2022-3-9 16:09:01 | 显示全部楼层 |阅读模式
1金钱
void NMEA_GPGSV_Analysis(nmea_msg *gpsx,u8 *buf)
{
        u8 *p,*p1,dx;
        u8 len,i,j,slx=0;
        u8 posx;            
        p=buf;
        p1=(u8*)strstr((const char *)p,"$GPGSV");
        len=p1[7]-'0';                                                                //得到GPGSV的条数
        posx=NMEA_Comma_Pos(p1,3);                                         //得到可见卫星总数
        if(posx!=0XFF)gpsx->svnum=NMEA_Str2num(p1+posx,&dx);
        for(i=0;i<len;i++)
        {         
                p1=(u8*)strstr((const char *)p,"$GPGSV");  
                for(j=0;j<4;j++)
                {          
                        posx=NMEA_Comma_Pos(p1,4+j*4);
                        if(posx!=0XFF)gpsx->slmsg[slx].num=NMEA_Str2num(p1+posx,&dx);        //得到卫星编号
                        else break;
                        posx=NMEA_Comma_Pos(p1,5+j*4);
                        if(posx!=0XFF)gpsx->slmsg[slx].eledeg=NMEA_Str2num(p1+posx,&dx);//得到卫星仰角
                        else break;
                        posx=NMEA_Comma_Pos(p1,6+j*4);
                        if(posx!=0XFF)gpsx->slmsg[slx].azideg=NMEA_Str2num(p1+posx,&dx);//得到卫星方位角
                        else break;
                        posx=NMEA_Comma_Pos(p1,7+j*4);
                        if(posx!=0XFF)gpsx->slmsg[slx].sn=NMEA_Str2num(p1+posx,&dx);        //得到卫星信噪比
                        else break;
                        slx++;          
                }   
                p=p1+1;//切换到下一个GPGSV信息
        }   
}

最佳答案

查看完整内容[请看2#楼]

C基础啊,'2'==》0x32 , 要变成十进制的 2 , 那不就减去一个 0x30咯,'0'==》0x30
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

10

主题

778

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6719
金钱
6719
注册时间
2017-4-12
在线时间
1257 小时
发表于 2022-3-9 16:09:02 | 显示全部楼层
jungsl 发表于 2022-3-9 20:46
大佬您好,我的理解是p1是$的指针变量,p1[7]就指向了GPGSV的条数,也就是2那个,但是那个-'0'没有理解, ...

C基础啊,'2'==》0x32 , 要变成十进制的 2 , 那不就减去一个 0x30咯,'0'==》0x30
回复

使用道具 举报

10

主题

778

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6719
金钱
6719
注册时间
2017-4-12
在线时间
1257 小时
发表于 2022-3-9 19:08:07 | 显示全部楼层
例:$GPGSV,2,1,08,06,33,240,45,10,36,074,47,16,21,078,44,17,36,313,42*78
  标准格式: $GPGSV,(1),(2),(3),(4),(5),(6),(7),…(4),(5),(6),(7)*hh(CR)(LF) 
各部分含义为:
  (1)总的GSV语句电文数;2;
  (2)当前GSV语句号:1;
  (3)可视卫星总数:08;
  (4)PRN码(伪随机噪声码) 也可以认为是卫星编号
  (5)仰角(00~90度):33度;
  (6)方位角(000~359度):240度;
  (7)信噪比(00~99dB):45dB(后面依次为第10,16,17号卫星的信息);   *总和校验域;    hh 总和校验数:78;   (CR)(LF)回车,换行。   



你要对着协议看,这个位置就是 GSV条数,个人不建议这样处理,建议你通过 分割字符串或scanf来解析
回复

使用道具 举报

6

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
89
金钱
89
注册时间
2021-7-27
在线时间
28 小时
 楼主| 发表于 2022-3-9 20:46:37 | 显示全部楼层
245925587 发表于 2022-3-9 19:08
例:$GPGSV,2,1,08,06,33,240,45,10,36,074,47,16,21,078,44,17,36,313,42*78
  标 ...

大佬您好,我的理解是p1是$的指针变量,p1[7]就指向了GPGSV的条数,也就是2那个,但是那个-'0'没有理解,麻烦您再指点一下。
回复

使用道具 举报

11

主题

114

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1128
金钱
1128
注册时间
2021-6-17
在线时间
206 小时
发表于 2022-3-10 09:08:57 | 显示全部楼层
那个2应该是字符2
回复

使用道具 举报

6

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
89
金钱
89
注册时间
2021-7-27
在线时间
28 小时
 楼主| 发表于 2022-3-10 10:25:18 | 显示全部楼层
245925587 发表于 2022-3-10 08:22
C基础啊,'2'==》0x32 , 要变成十进制的 2 , 那不就减去一个 0x30咯,'0'==》0x30

我明白了,谢谢大佬!
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-28 00:06

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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