匿名使用者
1級2011-08-25 回答
你好樓主,前一陣正好研究了一下linux串列埠程式設計,苦惱了一陣,不過總算弄通了,下面說一下我的思路和理解。
struct termios state; 這是乙個設計到串列埠屬性的結構體,通過給結構體內的屬性賦值來設計串列埠
的一些屬性。
tcgetattr (stdin_fileno, &state); 這是獲取當前的串列埠的屬性,並賦給stdin_fileno這個設
備。計算機中已定義stdin_fileno這是乙個標準輸入的設
備,通常是寫在螢幕上(就是在螢幕上顯示)。如樓主所說
的a與b相連,可能就是從a寫到b了。
*****下面是重新給串列埠的結構體的屬性賦值,以達到自己想設計乙個什麼功能的串列埠*****===
state.c_iflag &= ~(icrnl | inpck | istrip | brkint); c_iflag是控制輸入屬性的標誌位,打個比
方,c_iflag原來是111,icrnl代表001 ,icrnl代表010,istrip代表100,這三
個常量按位或icrnl | inpck | istrip 得出的結果就是111 然後再取 ~(非)符號
得的結果就是 000。就代表最終c_iflag的值是000。然後計算機就會根據這一竄二
進製的數字來判斷輸入的到底是什麼屬性。向icrnl 這些常量的值都是在計算機
中已經定義好的了。但是字串的位數要比我舉例子的要多,我只是說了個大概的
意思。 下面我說一下上面個引數的意思。
icrnl 代表將輸入中的回車換為新行。
inpck 代表啟用奇偶校驗。
istrip 代表去掉第八位,(就是傳輸是只傳7位)
brkint 代表 如果設定了ignbrk,將忽略break。如果沒有設定,但是設定了
brkint,那麼break將使得輸入和輸出佇列被重新整理(影響應該不大)
state.c_iflag |= ixon; ixon 表示可以用ctrl-s暫停輸出 。
state.c_lflag &= ~(icanon | iexten | isig | echo);
c_lflag 代表本地屬性(local),原理同上,下面介紹下個引數的用意。
icanon代表允許一些特殊字元以及按行緩衝。
iexten 當設定 時可被識別,不再作為輸入傳遞。
isig 代表當接收到intr quit susr 或 dsusp時產生訊號。
echo 顯示輸入字元。
state.c_oflag &= ~opost; c_oflag 代表輸出控制標誌位。
opost 代表程式可以選擇加工過的輸入
state.c_cflag |= cs8; c_cflag 代表控制標誌位(ctrl)
cs8代表字元長度掩碼是8為,(如會看到串列埠一些資料
「 9600 -8-n-1」 代表頻率9600,字元長度8位,無奇偶校驗,一
位停止位)。
state.c_cflag |= cread; cread代表設定接受使能。
state.c_cc[vmin] = 1; 代表非常規模式下讀的最小的字元數。
state.c_cc[vtime] = 0; 代表非常規模式下讀的最小延遲。
tcsetattr (stdin_fileno, tcsaflush, &state); 這是把剛才設定好的屬性又賦值給
stdin_fileno這個裝置。
tcsaflush代表當清空輸入輸出緩衝區時
才改變。
以上是我的看法,希望這些對你有幫助, 歡迎有問題與我交流。
追問:很詳細,多謝!這個n久前搞過,當時過去就過去了,沒太深入,現在都忘記了,依稀記得是某個flag標誌位,qq多少,交流一下吧?
串列埠接收標誌位語句 stm32串列埠 標誌位學習
在usart的傳送端有2個暫存器,乙個是程式可以看到的usart dr暫存器,另乙個是程式看不到的移位暫存器,對應usart資料傳送有兩個標誌,乙個是txe 傳送資料暫存器空,另乙個是tc 傳送結束。當usart dr中的資料傳送到移位暫存器後,txe被設定,此時移位暫存器開始向tx訊號線按位傳輸資...
Linux串列埠select傳送接收位不對齊問題
最近做乙個串列埠和fpga通訊的程式,linux環境下,使用select read去讀取串列埠。在使用的過程中開始總是提示接收的資料有誤。一直沒有去仔細核對過read讀取的資料長度。才導致了這個問題的產生。select其實只能監控串列埠fd檔案的寫入變化,不能監控到是否寫入了合格位元組數。比如我串列...
樹莓派 Linux串列埠程式設計 實現接收
recv.h ifndef recv h define recv h include include include include include include include include include define baudrate b115200 baud rate 115200 de...