歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux串口通信VTIME和VMIN的設置

Linux串口通信VTIME和VMIN的設置

日期:2017/2/28 16:11:11   编辑:Linux教程

options.c_cc[VTIME] = 0; /* 設置超時0 seconds*/

options.c_cc[VMIN] = 13; /* define the minimum bytes data to be readed*/

這兩句話決定了對串口讀取的函數read()的一些功能。我將著重介紹一下他們對read()函數的影響。


其中cc_t c_line只有在一些特殊的系統程序(比如,設置通過tty設備來通信的網絡協議)中才會用。在數組c_cc中有兩個下標(VTIME和VMIN)對應的元素不是控制符,並且只是在原始模式下有效。只有在原始模式下,他們決定了read()函數在什麼時候返回。在標准模式下,除非設置了O_NONBLOCK選項,否則只有當遇到文件結束符或各行的字符都已經編輯完畢後才返回。

控制符VTIME和VMIN之間有著復雜的關系。VTIME定義要求等待的零到幾百毫秒的時間量(通常是一個8位的unsigned char變量,取值不能大於cc_t)。VMIN定義了要求等待的最小字節數(不是要求讀的字節數——read()的第三個參數才是指定要求讀的最大字節數),這個字節數可能是0。

l 如果VTIME取0,VMIN定義了要求等待讀取的最小字節數。函數read()只有在讀取了VMIN個字節的數據或者收到一個信號的時候才返回。

l 如果VMIN取0,VTIME定義了即使沒有數據可以讀取,read()函數返回前也要等待幾百毫秒的時間量。這時,read()函數不需要像其通常情況那樣要遇到一個文件結束標志才返回0。

l 如果VTIME和VMIN都不取0,VTIME定義的是當接收到第一個字節的數據後開始計算等待的時間量。如果當調用read函數時可以得到數據,計時器馬上開始計時。如果當調用read函數時還沒有任何數據可讀,則等接收到第一個字節的數據後,計時器開始計時。函數read可能會在讀取到VMIN個字節的數據後返回,也可能在計時完畢後返回,這主要取決於哪個條件首先實現。不過函數至少會讀取到一個字節的數據,因為計時器是在讀取到第一個數據時開始計時的。

l 如果VTIME和VMIN都取0,即使讀取不到任何數據,函數read也會立即返回。同時,返回值0表示read函數不需要等待文件結束標志就返回了。


<?XML:NAMESPACE PREFIX = O />

Copyright © Linux教程網 All Rights Reserved