⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 编写一个模拟GPS的应用程序
💻 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 + -