【OK210试用体验】+第十三篇☞编写程序分析并提取GPS有效数据 - 在线问答 - 电子技术论坛 - 最好最受欢迎电子论坛!

【OK210试用体验】+第十三篇☞编写程序分析并提取GPS有效数据

杨永胜 ( 楼主 ) 2015-9-13 15:35:58  只看该作者 倒序浏览
本帖最后由 iysheng 于 2015-9-14 22:59 编辑

今天开始真正涉及到GPS了,因为我的项目就是围绕着GPS里面的数据进行展开的,首先由于,我申请的项目,只是提取时钟数据,所以分析了GPS数据格式之后,
我决定使用以$GPGGA开头的数据信息,具体如上图所示,很明显可以看出来,我们需要的时间数据就$GPGGA,之后的字符里面(以ASCII码进行表示的)。所以我的目的就是要把这些有效的数据提取出来,而不必要占用太多的内存资源,所以我接下来的代码目的就是纯粹的提取有效的数据,无效的数据进行舍弃,
整个,程序设计大的框架如下所示:


接下来,就是按照我的整个框架思路,写出程序如下所示,源代码如下:
  1. #include
  2. #include
  3. #include
  4. #include
  5. #include
  6. #include
  7. #include
  8. #include
  9. #include "uart.h"
  10. #include

  11. struct termios uart1;

  12. int main(void)
  13. {
  14.         int fd = 0;
  15.         static unsigned char buff[]="hello china";
  16.         unsigned char flag;
  17.         unsigned char num[6] = {0,0,0,0,0,0};
  18.         unsigned char time[10] = {0,0,0,0,0,0,0,0,0,0};
  19.         unsigned char out[33]="now the time is 12:00:00 ... 000";
  20.         int rb;
  21.         int len;
  22.         int hour,min,sec,msec;
  23.         len = strlen(buff);

  24.         fd = open("/dev/s3c2410_serial0", O_RDWR|O_NOCTTY);//以读写方式打开设备
  25.         if (fd == -1){
  26.                 printf("open the keydev failed! the errno is %dn",errno);
  27.                 return errno;}
  28.         tcgetattr(fd, &uart1);        
  29.         uart1.c_lflag &= ~(ECHO|ECHOE|ISIG|ICANON);
  30.         uart1.c_oflag &= ~OPOST;
  31.         tcsetattr(fd, TCSANOW,&uart1);
  32.         printf("welcome to linux worldn");
  33.         write(fd, buff, len);

  34.         while(1){
  35.         rb = read(fd, &flag, 1);//读取一个字符
  36.         if (flag == '最后,我通过验证,这样设计的程序可以很准确的提取出来有效的数据(由于本次我使用的是串口模拟输出数据,所以做了很多的干扰信息,本次程序设计主要提供一种提取GPS有效数据的思路,实际里面还有一个比较重要的是否定位的数据,可以进一步判断当前数据是否有效,本次就省略了,)
  37. 最后运行效果如下:


  38. 很明显,我把包含奇数信息的数据设计成有效信息,偶数的信息是干扰信息,最后效果很准确的提取出来了,至此这种通过在Linux操作系统上,通过虚拟终端输出时钟数据的方法已经实现了。



  39. ){//判断是否等于$
  40.         rb = read(fd, num, 5);//如果是$,读取接下来的5个字符
  41.         num[5]='\0';//为了和字符串进行比较,所以加上一个字符串结束符
  42.         if (strcmp(num, "GPGGA") == 0)//和“GPGGA”进行比较
  43.         {
  44.         read(fd,time,10);//读取接下来的时间数据

  45.         out[16] = time[1];
  46.         out[17] = time[2];
  47.         out[19] = time[3];
  48.         out[20] = time[4];
  49.         out[22] = time[5];
  50.         out[23] = time[6];
  51.         out[29] = time[7];
  52.         out[30] = time[8];
  53.         out[31] = time[9];//对字符串进行赋值,因为我printf函数不能正常输出,所以要用puts函数
  54.         puts(out);//通过虚拟终端输出时间
  55.         }
  56.         if (rb < 0)
  57.                 perror("read err");
  58.         }
  59.         }
  60.         return 0;
  61. }
复制代码
最后,我通过验证,这样设计的程序可以很准确的提取出来有效的数据(由于本次我使用的是串口模拟输出数据,所以做了很多的干扰信息,本次程序设计主要提供一种提取GPS有效数据的思路,实际里面还有一个比较重要的是否定位的数据,可以进一步判断当前数据是否有效,本次就省略了,)
最后运行效果如下:


很明显,我把包含奇数信息的数据设计成有效信息,偶数的信息是干扰信息,最后效果很准确的提取出来了,至此这种通过在Linux操作系统上,通过虚拟终端输出时钟数据的方法已经实现了。



2个回复

HelloWii 发表于 2015-9-14 13:32:00
不错。。。。
回复

举报 使用道具

杨永胜 发表于 2015-9-14 17:51:30

谢谢支持啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则


关闭

站长推荐上一条 /6 下一条

小黑屋|手机版|Archiver|电子发烧友 ( 湘ICP备2023018690号 )

GMT+8, 2024-12-22 11:26 , Processed in 0.584647 second(s), Total 64, Slave 44 queries .

Powered by 电子发烧友网

© 2015 bbs.elecfans.com

微信扫描
快速回复 返回顶部 返回列表