OpenEdv-开源电子网

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

原子哥的gps解析程序,解析后的数据放在哪里了呀?

[复制链接]

3

主题

9

帖子

0

精华

新手上路

积分
49
金钱
49
注册时间
2019-3-10
在线时间
13 小时
发表于 2019-4-25 11:32:02 | 显示全部楼层 |阅读模式
1金钱
[mw_shl_code=c,true]//·ÖÎöGPRMCÐÅÏ¢
//gpsx:nmeaÐÅÏ¢½á¹¹Ìå
//buf:½ÓÊÕµ½µÄGPSÊý¾Ý»º³åÇøÊ×µØÖ·
void NMEA_GPRMC_Analysis(nmea_msg *gpsx,u8 *buf)
{
        u8 *p1,dx;                         
        u8 posx;     
        u32 temp;          
        float rs;  
        p1=(u8*)strstr((const char *)buf,"GPRMC");//"$GPRMC",¾­³£ÓÐ&ºÍGPRMC·Ö¿ªµÄÇé¿ö,¹ÊÖ»ÅжÏGPRMC.
        posx=NMEA_Comma_Pos(p1,1);                                                                //µÃµ½UTCʱ¼ä
        if(posx!=0XFF)
        {
                temp=NMEA_Str2num(p1+posx,&dx)/NMEA_Pow(10,dx);                 //µÃµ½UTCʱ¼ä,È¥µôms
                gpsx->utc.hour=temp/10000;
                gpsx->utc.min=(temp/100)%100;
                gpsx->utc.sec=temp%100;                  
        }       
        posx=NMEA_Comma_Pos(p1,3);                                                                //µÃµ½Î³¶È
        if(posx!=0XFF)
        {
                temp=NMEA_Str2num(p1+posx,&dx);                          
                gpsx->latitude=temp/NMEA_Pow(10,dx+2);        //µÃµ½¡ã
                rs=temp%NMEA_Pow(10,dx+2);                                //µÃµ½'                 
                gpsx->latitude=gpsx->latitude*NMEA_Pow(10,5)+(rs*NMEA_Pow(10,5-dx))/60;//ת»»Îª¡ã
        }
        posx=NMEA_Comma_Pos(p1,4);                                                                //ÄÏγ»¹ÊDZ±Î³
        if(posx!=0XFF)gpsx->nshemi=*(p1+posx);                                         
        posx=NMEA_Comma_Pos(p1,5);                                                                //µÃµ½¾­¶È
        if(posx!=0XFF)
        {                                                                                                  
                temp=NMEA_Str2num(p1+posx,&dx);                          
                gpsx->longitude=temp/NMEA_Pow(10,dx+2);        //µÃµ½¡ã
                rs=temp%NMEA_Pow(10,dx+2);                                //µÃµ½'                 
                gpsx->longitude=gpsx->longitude*NMEA_Pow(10,5)+(rs*NMEA_Pow(10,5-dx))/60;//ת»»Îª¡ã
        }
        posx=NMEA_Comma_Pos(p1,6);                                                                //¶«¾­»¹ÊÇÎ÷¾­
        if(posx!=0XFF)gpsx->ewhemi=*(p1+posx);                 
        posx=NMEA_Comma_Pos(p1,9);                                                                //µÃµ½UTCÈÕÆÚ
        if(posx!=0XFF)
        {
                temp=NMEA_Str2num(p1+posx,&dx);                                                 //µÃµ½UTCÈÕÆÚ
                gpsx->utc.date=temp/10000;
                gpsx->utc.month=(temp/100)%100;
                gpsx->utc.year=2000+temp%100;                  
        }
}[/mw_shl_code]        
这是放到这个结构体里了?
[mw_shl_code=c,true]__packed typedef struct  
{                                                                                    
        u8 svnum;                                        //¿É¼ûÎÀÐÇÊý
        nmea_slmsg slmsg[12];                //×î¶à12¿ÅÎÀÐÇ
        nmea_utc_time utc;                        //UTCʱ¼ä
        u32 latitude;                                //γ¶È ·ÖÀ©´ó100000±¶,ʵ¼ÊÒª³ýÒÔ100000
        u8 nshemi;                                        //±±Î³/ÄÏγ,N:±±Î³;S:ÄÏγ                                  
        u32 longitude;                            //¾­¶È ·ÖÀ©´ó100000±¶,ʵ¼ÊÒª³ýÒÔ100000
        u8 ewhemi;                                        //¶«¾­/Î÷¾­,E:¶«¾­;W:Î÷¾­
        u8 gpssta;                                        //GPS״̬:0,δ¶¨Î»;1,·Ç²î·Ö¶¨Î»;2,²î·Ö¶¨Î»;6,ÕýÔÚ¹ÀËã.                                  
        u8 posslnum;                                //ÓÃÓÚ¶¨Î»µÄÎÀÐÇÊý,0~12.
        u8 possl[12];                                //ÓÃÓÚ¶¨Î»µÄÎÀÐDZàºÅ
        u8 fixmode;                                        //¶¨Î»ÀàÐÍ:1,ûÓж¨Î»;2,2D¶¨Î»;3,3D¶¨Î»
        u16 pdop;                                        //λÖþ«¶ÈÒò×Ó 0~500,¶ÔӦʵ¼ÊÖµ0~50.0
        u16 hdop;                                        //ˮƽ¾«¶ÈÒò×Ó 0~500,¶ÔӦʵ¼ÊÖµ0~50.0
        u16 vdop;                                        //´¹Ö±¾«¶ÈÒò×Ó 0~500,¶ÔӦʵ¼ÊÖµ0~50.0

        int altitude;                                 //º£°Î¸ß¶È,·Å´óÁË10±¶,ʵ¼Ê³ýÒÔ10.µ¥Î»:0.1m         
        u16 speed;                                        //µØÃæËÙÂÊ,·Å´óÁË1000±¶,ʵ¼Ê³ýÒÔ10.µ¥Î»:0.001¹«Àï/Сʱ         
}nmea_msg; [/mw_shl_code]




最佳答案

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

gpsx这个变量里面了
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

51

主题

2166

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10653
金钱
10653
注册时间
2017-4-14
在线时间
2780 小时
发表于 2019-4-25 11:32:03 | 显示全部楼层
回复

使用道具 举报

3

主题

9

帖子

0

精华

新手上路

积分
49
金钱
49
注册时间
2019-3-10
在线时间
13 小时
 楼主| 发表于 2019-4-25 14:31:06 | 显示全部楼层
nashui_sx 发表于 2019-4-25 12:30
gpsx这个变量里面了

只在main.c里看到一句 nmea_msg gpsx;        
没懂gpsx这个是怎么定义的,比如我想只打印输出经度数据?
回复

使用道具 举报

3

主题

9

帖子

0

精华

新手上路

积分
49
金钱
49
注册时间
2019-3-10
在线时间
13 小时
 楼主| 发表于 2019-4-25 15:18:29 | 显示全部楼层
zxczxc1208 发表于 2019-4-25 14:31
只在main.c里看到一句 nmea_msg gpsx;        
没懂gpsx这个是怎么定义的,比如我想只打印输出经度数据?

奥 我知道了。结构体变量,c 快忘光了
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
2
金钱
2
注册时间
2019-5-14
在线时间
0 小时
发表于 2019-5-14 13:53:09 | 显示全部楼层
zxczxc1208 发表于 2019-4-25 15:18
奥 我知道了。结构体变量,c 快忘光了

全部代码可以发一下吗
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-25 19:35

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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