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

📄 main.c

📁 基于s3C2410的源代码 在linux操作系统下实现
💻 C
字号:
/************************************************ *  GPS read demo ,use com2 *  by Zou jian guo <ah_zou@163.com>    *  2004-10-22 **************************************************/#include <termios.h>#include <stdio.h>#include <stdlib.h> #include <unistd.h>#include <fcntl.h>#include <sys/signal.h>#include <pthread.h>#include "gps.h"#define BAUDRATE B9600#define COM1 "/dev/tts/1"#define COM2 "/dev/tts/2"#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];static int baud=BAUDRATE;int get_baudrate(int argc,char** argv);void child_handler(int s){  printf("stop!!!\n");   STOP=TRUE;}/*--------------------------------------------------------*/void* keyboard(void * data){    int c;	for (;;){		if((c=getchar()) == 10){       		STOP=TRUE;       		break ;		}//		printf("key=%d\n",c);	}    return NULL;}/*--------------------------------------------------------*/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;	}}/*--------------------------------------------------------*//* 	READ GPS information handler 	if receive the enter char ,then copy the line to GPS_BUF.*/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); /* com port */    	buf[i++] = c;		if(c == '\n'){			strncpy(GPS_BUF,buf,i);			i=0;			GET_GPS_OK=TRUE;		}		if(STOP)break;		//write(1,&c,1); /* stdout */  	}  	printf("exit from reading modem\n");  	return NULL; }/*--------------------------------------------------------*/int main(int argc,char** argv){	struct termios oldtio,newtio,oldstdtio,newstdtio;	struct sigaction sa;	int ok; 	pthread_t th_a, th_b, th_show; 	void * retval;   	fd = open(COM2, O_RDWR );	if (fd <0) {    	perror(COM2);    	exit(-1);  	}		if(argc < 2)                printf("Default baudrate is 9600 bps. If not, please enter baudrate as a parameter\n");       else		baud=get_baudrate(argc, argv);  	tcgetattr(0,&oldstdtio);  	tcgetattr(fd,&oldtio); /* save current modem settings */  	tcgetattr(fd,&newstdtio); /* get working stdtio */	newtio.c_cflag = baud | CRTSCTS | CS8 | CLOCAL | CREAD;/*ctrol flag*/	newtio.c_iflag = IGNPAR; /*input flag*/	newtio.c_oflag = 0;		/*output flag*/ 	newtio.c_lflag = 0; 	newtio.c_cc[VMIN]=1;	newtio.c_cc[VTIME]=0; /* now clean the modem line and activate the settings for modem */ 	tcflush(fd, TCIFLUSH);	tcsetattr(fd,TCSANOW,&newtio);/*set attrib	  */  	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); /* restore old modem setings */  	tcsetattr(0,TCSANOW,&oldstdtio); /* restore old tty setings */  	close(fd);  	exit(0); }int get_baudrate(int argc,char** argv){	int v=atoi(argv[1]);	 switch(v){		case 4800:			return B4800;					case 9600:			return B9600;					case 19200:			return B19200;					case 38400:			return B38400;					case 57600:			return B57600;					case 115200:			return B115200;		default:			return -1;	 } 	 }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -