本帖最后由 iysheng 于 2015-9-14 22:59 编辑
今天开始真正涉及到GPS了,因为我的项目就是围绕着GPS里面的数据进行展开的,首先由于,我申请的项目,只是提取时钟数据,所以分析了GPS数据格式之后,
我决定使用以
$GPGGA开头的数据信息,具体如上图所示,很明显可以看出来,我们需要的时间数据就$GPGGA,之后的字符里面(以ASCII码进行表示的)。所以我的目的就是要把这些
有效的数据提取出来,而不必要占用太多的内存资源,所以我接下来的代码目的就是
纯粹的提取有效的数据,无效的数据进行舍弃,
整个,程序设计大的框架如下所示:
接下来,就是按照我的整个框架思路,写出程序如下所示,源代码如下:
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include "uart.h"
- #include
- struct termios uart1;
- int main(void)
- {
- int fd = 0;
- static unsigned char buff[]="hello china";
- unsigned char flag;
- unsigned char num[6] = {0,0,0,0,0,0};
- unsigned char time[10] = {0,0,0,0,0,0,0,0,0,0};
- unsigned char out[33]="now the time is 12:00:00 ... 000";
- int rb;
- int len;
- int hour,min,sec,msec;
- len = strlen(buff);
- fd = open("/dev/s3c2410_serial0", O_RDWR|O_NOCTTY);//以读写方式打开设备
- if (fd == -1){
- printf("open the keydev failed! the errno is %dn",errno);
- return errno;}
- tcgetattr(fd, &uart1);
- uart1.c_lflag &= ~(ECHO|ECHOE|ISIG|ICANON);
- uart1.c_oflag &= ~OPOST;
- tcsetattr(fd, TCSANOW,&uart1);
- printf("welcome to linux worldn");
- write(fd, buff, len);
- while(1){
- rb = read(fd, &flag, 1);//读取一个字符
- if (flag == '最后,我通过验证,这样设计的程序可以很准确的提取出来有效的数据(由于本次我使用的是串口模拟输出数据,所以做了很多的干扰信息,本次程序设计主要提供一种提取GPS有效数据的思路,实际里面还有一个比较重要的是否定位的数据,可以进一步判断当前数据是否有效,本次就省略了,)
- 最后运行效果如下:
-
- 很明显,我把包含奇数信息的数据设计成有效信息,偶数的信息是干扰信息,最后效果很准确的提取出来了,至此这种通过在Linux操作系统上,通过虚拟终端输出时钟数据的方法已经实现了。
- ){//判断是否等于$
- rb = read(fd, num, 5);//如果是$,读取接下来的5个字符
- num[5]='\0';//为了和字符串进行比较,所以加上一个字符串结束符
- if (strcmp(num, "GPGGA") == 0)//和“GPGGA”进行比较
- {
- read(fd,time,10);//读取接下来的时间数据
- out[16] = time[1];
- out[17] = time[2];
- out[19] = time[3];
- out[20] = time[4];
- out[22] = time[5];
- out[23] = time[6];
- out[29] = time[7];
- out[30] = time[8];
- out[31] = time[9];//对字符串进行赋值,因为我printf函数不能正常输出,所以要用puts函数
- puts(out);//通过虚拟终端输出时间
- }
- if (rb < 0)
- perror("read err");
- }
- }
- return 0;
- }
最后,我通过验证,这样设计的程序可以很准确的提取出来有效的数据(由于本次我使用的是串口模拟输出数据,所以做了很多的干扰信息,本次程序设计主要提供一种提取GPS有效数据的思路,实际里面还有一个比较重要的是否定位的数据,可以进一步判断当前数据是否有效,本次就省略了,)
最后运行效果如下:
很明显,我把包含奇数信息的数据设计成有效信息,偶数的信息是干扰信息,最后效果很准确的提取出来了,至此这种通过在Linux操作系统上,通过虚拟终端输出时钟数据的方法已经实现了。