?? term.c
字號:
#include <termios.h>/*終端控制定義*/#include <stdio.h>/*標準輸入輸出定義*/#include <unistd.h>/*Unix 標準函數定義*/#include <fcntl.h>/*文件控制定義*/#include <sys/signal.h>/*信號定義*/#include <pthread.h>/*線程定義*/#define BAUDRATE B115200 /*波特率預定義*/#define COM1 "/dev/ttyS0" /*預定義串口1*///#define ENDMINITERM 27 /* ESC to quit miniterm */#define ENDMINITERM 0x1B /* ESC to quit miniterm */#define FALSE 0#define TRUE 1volatile int STOP=FALSE;volatile int fd;/*當ESC鍵按下時將終止程序運行------*/void* keyboard(void * data){ int c; for (;;){ c=getchar(); printf("aaa\n"); if( c== ENDMINITERM){ STOP=TRUE; break ; } } return NULL;}/*從串口接收數據線程-------------------*/void* receive(void * data){ int c; printf("read modem\n"); while (STOP==FALSE) { read(fd,&c,1); /* 從串口讀出數據 */ write(1,&c,1); /* 在終端上輸出數據 */ } 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); /* 向串口寫入數據 */ usleep(100000);//睡眠100毫秒 } return NULL; /* wait for child to die or it will become a zombie */}/*主函數-------------------------------------------------*/int main(int argc,char** argv){ struct termios oldtio,newtio; int ok; pthread_t th_a, th_b, th_c;/*th_a 終止程序運行;th_b接收數據;th_c發送數據*/ void * retval; fd = open(COM1, O_RDWR ); //讀寫方式打開串口1; if (fd <0)//失敗處理 { perror(COM1); 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_c, NULL, send, 0); pthread_join(th_a, &retval);/*等待線程結束*/ pthread_join(th_b, &retval); pthread_join(th_c, &retval); tcsetattr(fd,TCSANOW,&oldtio); /* 恢復舊的設置 */ close(fd); exit(0); }
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -