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

📄 term.c

📁 UP-NETARM3000下教材实例源码,其中提供了多个实验内容源码,使用ARM相应开发环境即可
💻 C
字号:
/************************************************ *  serial communication demo *  by Zou jian guo <ah_zou@163.com>    *  2003-12-22 **************************************************/#include <termios.h>#include <stdio.h>#include <unistd.h>#include <fcntl.h>#include <sys/signal.h>#include <pthread.h>#define BAUDRATE B115200#define COM1 "/dev/ttyS0"#define COM2 "/dev/ttyS1"#define ENDMINITERM 27 /* ESC to quit miniterm */#define FALSE 0#define TRUE 1volatile int STOP=FALSE;volatile int fd;void child_handler(int s){  printf("stop!!!\n");   STOP=TRUE;}/*--------------------------------------------------------*/void* keyboard(void * data){    int c;	for (;;){		c=getchar();      	if( c== ENDMINITERM){        	STOP=TRUE;        	break ;      	}	}    return NULL;}/*--------------------------------------------------------*//* modem input handler */void* receive(void * data){	int c;  	printf("read modem\n");  	while (STOP==FALSE)   	{    	read(fd,&c,1); /* com port */    	write(1,&c,1); /* stdout */  	}  	printf("exit from reading modem\n");  	return NULL; }/*--------------------------------------------------------*/void* send(void * data){  	int c='0';  	printf("send data\n");  	while (STOP==FALSE)   	{    	c++;    	c %= 255;    	write(fd,&c,1); /* stdout */    	usleep(100000);  	}  	return NULL; /* wait for child to die or it will become a zombie */}/*--------------------------------------------------------*/int main(int argc,char** argv){	struct termios oldtio,newtio,oldstdtio,newstdtio;	struct sigaction sa;	int ok; 	pthread_t th_a, th_b, th_c; 	void * retval;	if( argc > 1)    	fd = open(COM2, O_RDWR );  	else    		fd = open(COM1, O_RDWR ); //| O_NOCTTY |O_NONBLOCK);	if (fd <0) {    	perror(COM1);    	exit(-1);  	}  	tcgetattr(0,&oldstdtio);  	tcgetattr(fd,&oldtio); /* save current modem settings */  	tcgetattr(fd,&newstdtio); /* get working stdtio */	newtio.c_cflag = BAUDRATE | 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	  */  	sa.sa_handler = child_handler;  	sa.sa_flags = 0;  	sigaction(SIGCHLD,&sa,NULL); /* handle dying child */  	pthread_create(&th_a, NULL, keyboard, 0);  	pthread_create(&th_b, NULL, receive, 0);  	pthread_create(&th_c, NULL, send, 0);  	pthread_join(th_a, &retval);  	pthread_join(th_b, &retval);  	pthread_join(th_c, &retval);  	tcsetattr(fd,TCSANOW,&oldtio); /* restore old modem setings */  	tcsetattr(0,TCSANOW,&oldstdtio); /* restore old tty setings */  	close(fd);  	exit(0); }

⌨️ 快捷键说明

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