在线问答
直播中

杨永胜

11年用户 2379经验值
擅长:嵌入式技术
私信 关注

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

本帖最后由 iysheng 于 2015-9-14 22:59 编辑

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

接下来,就是按照我的整个框架思路,写出程序如下所示,源代码如下:
  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. OK.png

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



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

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


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



回帖(2)

HelloWii

2015-9-14 13:32:00
不错。。。。
举报

杨永胜

2015-9-14 17:51:30
引用: HelloWii 发表于 2015-9-14 13:32
不错。。。。

谢谢支持啊
举报

更多回帖

发帖
×
20
完善资料,
赚取积分