1、串列埠的配置:
struct termios options; // 串列埠配置結構體
tcgetattr(fd,&options); //獲取當前設定
bzero(&options,sizeof(options));
options.c_cflag |= b115200 | clocal | cread; // 設定波特率,本地連線,接收使能
options.c_cflag &= ~csize; //遮蔽資料位
options.c_cflag |= cs8; // 資料位為 8 ,cs7 for 7
options.c_cflag &= ~cstopb; // 一位停止位, 兩位停止為 |= cstopb
options.c_cflag &= ~parenb; // 無校驗
|= parenb; //有校驗
&= ~parodd // 偶校驗
|= parodd // 奇校驗
options.c_cc[vtime] = 0; // 等待時間,單位百毫秒 (讀)。後有詳細說明
options.c_cc[vmin] = 0; // 最小位元組數 (讀)。後有詳細說明
tcflush(fd, tcioflush); // tciflush刷清輸入佇列。
tcoflush刷清輸出佇列。
tcioflush刷清輸入、輸出佇列。
tcsetattr(fd, tcsanow, &options); // tcsanow立即生效;
tcsadrain:wait until everything has been transmitted;
tcsaflush:flush input and output buffers and make the change
2、vtime 和 vmin講解:
vtime定義要求等待的時間量(取值不能大於cc_t)。
vmin定義了要求等待的最小位元組數。
options.c_cc[vtime] = x; //設定從獲取到1個位元組後開始計時的超時時間
options.c_cc[vmin] = y; //設定要求等待的最小位元組數
在原始模式下對read()函式的影響:
1、x=0,y!=0。函式read()只有在讀取了y個位元組的資料或者收到乙個訊號的時候才返回;
2、x!=0,y=0。即使沒有資料可以讀取,read()函式等待x時間量後返回;
3、x!=0,y!=0。第乙個位元組資料到時開始,最先滿足收到y個位元組或達超時時間x任意乙個條件,read()返回;
4、x=0,y=0。即使讀取不到任何資料,函式read也會立即返回。
示例:通過串列埠連id卡讀卡器,要求讀串列埠至少收6個位元組資料立即返回,可以將串列埠的上述兩個設定項設定如下:
options.c_cc[vtime]=0;
options.c_cc[vmin]=6;
linux 下串列埠程式設計VTIME和VMIN的設定
vtime定義要求等待的時間量 取值不能大於cc t vmin定義了要求等待的最小位元組數。options.c cc vtime x 設定從獲取到1個位元組後開始計時的超時時間 options.c cc vmin y 設定要求等待的最小位元組數 在原始模式下對read 函式的影響 1 x 0,y 0...
linux 下串列埠程式設計VTIME和VMIN的設定
vtime定義要求等待的時間量 取值不能大於cc t vmin定義了要求等待的最小位元組數。options.c cc vtime x 設定從獲取到1個位元組後開始計時的超時時間 options.c cc vmin y 設定要求等待的最小位元組數 在原始模式下對read 函式的影響 1 x 0,y 0...
Linux下串列埠引數VTIME和VMIN的用法
vtime指定了等待的時間,vmin指定了讀取字元的最小數量。它們不同組合地取值會得到不同的結果,分別如下 1 當vtime 0,vmin 0時。read呼叫將保持阻塞直到讀取到第乙個字元,讀到了第乙個字元之後開始計時,此後若時間到了vtime或者時間未到但已讀夠了vmin個字元則會返回 若在時間未...