串列埠接收標誌位語句 串列埠程式設計中,如何設定標誌位

2021-10-13 09:04:14 字數 1847 閱讀 2208

匿名使用者

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...