📄 main.c
字号:
/************************************************ * GPS read demo ,use com2 * by Zou jian guo <ah_zou@163.com> * 2004-10-22 **************************************************/#include <termios.h>#include <stdio.h>#include <unistd.h>#include <fcntl.h>#include <sys/signal.h>#include <pthread.h>#include "gps.h"#define BAUDRATE B4800#define COM3 "/dev/ttyS2"#define ENDMINITERM 27 /* ESC to quit miniterm */#define FALSE 0#define TRUE 1volatile int STOP=FALSE;volatile int fd;GPS_INFO gps_info;int GET_GPS_OK=FALSE;char GPS_BUF[1024];/*---当ESC键按下时将终止程序运行--------------------------------*/void* keyboard(void * data){ int c; for (;;){ if((c=getchar()) == ENDMINITERM){ STOP=TRUE; break ; } } return NULL;}/*-显示GPS信息----------------------------------------*/void* show_gps_info(void * data){ while(1){ if(GET_GPS_OK){ GET_GPS_OK=FALSE; printf("%s",GPS_BUF); gps_parse(GPS_BUF,&gps_info); show_gps(&gps_info); } usleep(100); if(STOP)break; }}/*-接收GPS数据---------------------------------------------*/void* receive(void * data){ int i=0; char c; char buf[1024]; GPS_INFO GPS; printf("read modem\n"); while (STOP==FALSE) //没有结束 { read(fd,&c,1); /* 读一个字符 */ buf[i++] = c; if(c == '\n'){ strncpy(GPS_BUF,buf,i); i=0; GET_GPS_OK=TRUE; } if(STOP)break; } printf("exit from reading modem\n"); return NULL; }/*--------------------------------------------------------*/int main(int argc,char** argv){ struct termios oldtio,newtio; int ok; pthread_t th_a, th_b, th_show;//th_a键盘控制;th_b接收信息;th_show显示信息 void * retval; fd = open(COM3, O_RDWR );//打开串口 if (fd <0) { perror(COM3); exit(-1); } tcgetattr(fd,&oldtio); /* 存储串口设置 */ newtio.c_cflag = BAUDRATE | CRTSCTS | CS8 | CLOCAL | CREAD;/*控制模式标志.设定bps的速度;硬体流量控制;8位,无校验位,1个终止位;本地连线,只能接收字元*/ newtio.c_iflag = IGNPAR; /*输入模式标志,IGNPAR忽略奇偶校验位 */ newtio.c_oflag = 0; /*输出模式标志.0 Raw模式输出 */ newtio.c_lflag = 0;/*0非标准型输入,不回应*/ newtio.c_cc[VMIN]=1;/*在读取到1个字元前先停止*/ newtio.c_cc[VTIME]=0;/*不使用分割字元组的计时器*/ tcflush(fd, TCIFLUSH);/*清除串口缓冲区*/ tcsetattr(fd,TCSANOW,&newtio);/*设置串口新参数.TCSANOW常量指定所有的改变将立即生效, */ pthread_create(&th_a, NULL, keyboard, 0); pthread_create(&th_b, NULL, receive, 0); pthread_create(&th_show, NULL, show_gps_info, 0); while(!STOP){ usleep(100000); } pthread_join(th_a, &retval); pthread_join(th_b, &retval); pthread_join(th_show, &retval); tcsetattr(fd,TCSANOW,&oldtio); /* 恢复旧的设置 */ close(fd); exit(0); }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -