浓毛老太交欧美老妇热爱乱,蜜臀性色av免费,妺妺窝人体色www看美女,久久久久久久久久久大尺度免费视频,麻豆人妻无码性色av专区

位置:51電子網(wǎng) » 技術(shù)資料 » 通信網(wǎng)絡(luò)

Linux串口通信編程(Linux Serial Programming HOWTO)

發(fā)布時間:2008/8/18 0:00:00 訪問次數(shù):951

最好的偵錯你程式碼的方法是建構(gòu)另一臺 linux box, 并把兩臺電腦用 null-modem 纜線連接. 用 miniterm以傳送字元到你的 linux box. miniterm 很容易編譯而它會把所有輸入到鍵盤的字元透過序列埠傳送. 只有這個宣告定義會被檢查 #define modemdevice "/dev/ttys0". 如果是 com1 設(shè)定為 ttys0, 如果是 com2 設(shè)定為 ttys1 等等.. 先前的測試是必要的, 所有的 字元都將以 raw 方式 (不經(jīng)任何處理) 直接傳送. 測試是否連接正確, 在兩臺電腦上都啟動 miniterm 然後隨便在鍵盤上亂按. 在其中一臺上輸入的字元應(yīng)該會顯示在另一臺電腦上反之亦同. 但輸入的字元不會回應(yīng)到與之相連的螢?zāi)簧?

要自制 null-modem 的電纜, 你必需要把 txd (傳送) 及 rxd (接收) 兩線對調(diào).

當然也可以只用一臺電腦來作相同的測試, 只要電腦上有兩個未使用的序列埠. 當然你也就要執(zhí)行兩個 miniterm 來當虛擬控制臺. 如果你是藉由拔去滑鼠來取得另一個序列埠, 記得要把 /dev/mouse 裝置重新導(dǎo)向, 如果它存在的話. 如果你使用多埠的序列埠控制卡, 請確定它已設(shè)定正確. 當我在我的電腦上測試時也曾經(jīng)因為設(shè)定錯誤而出過槌. 當我連到另一臺電腦, 通訊埠開始傳送字元. 就因為剛好這不是完整的非同步式傳輸, 所以可在同一臺電腦上執(zhí)行兩個程式.

連接埠設(shè)定
/dev/ttys* 裝置會被當成連接到你的 linux box 的終端機, 并且在啟動後就設(shè)定好了. 這個觀念在你寫 raw 裝置的通訊程式時必需記住. 也就是說這個連接埠被設(shè)定為回應(yīng)所有自這個裝置送出的字元, 而用在資料傳輸時通常這種要改變這種工作模式.

所有的參數(shù)可以由一個小程式簡單的完成. 設(shè)定參數(shù)被放在一個結(jié)構(gòu)體內(nèi) struct termios, 他的定義檔在 :

#define nccs 19
struct termios {
tcflag_t c_iflag; /* 輸入模式旗標 */
tcflag_t c_oflag; /* 輸出模式旗標 */
tcflag_t c_cflag; /* 控制模式旗標 */
tcflag_t c_lflag; /* 區(qū)域模式旗標 */
cc_t c_line; /* 行控制 (line discipline) */
cc_t c_cc[nccs]; /* 控制特性 */
};

這個檔案也包含所有的旗標定義. 輸入模式旗標在 c_iflag 掌管所有的輸入處理, 這就意謂著由裝置上傳來的字元在還沒用 read 功能讀取前可以先處理過. 同理 c_oflag 掌管所有的輸出處理. c_cflag 包含連接埠的設(shè)定, 如 鮑率, 每字元多少位元, 停止位元, 等等.. 區(qū)域模式旗標放在 c_lflag 用來偵測字元是否回應(yīng), 而訊號會送到你的程式, 等等.. 最後 c_cc 陣列定義了檔案終了的控制字元, 停止, 等等.. 預(yù)設(shè)的控制字元值放在 . 有關(guān)旗標的細節(jié)擺在使用手冊 termios(3). termios 結(jié)構(gòu)體內(nèi)的 c_line 行控制 (line discipline) 元素, 不能在 posix 相容的系統(tǒng)下使用譯者注:這里所說的 line discipline 雖然我翻成 行控制但還是很難說出那是舍. 如果想知道請看看 kernel :( .


序列裝置的輸入觀念
有三個輸入的觀念要說明. 按照所要寫的應(yīng)用程式選用適合的觀念. 盡量避免使用回圈來讀取單一的字元再組成字串. 我曾這樣做過, 會掉字元, 且對 read 而言不會顯示任何錯誤.


標準輸入程序
這是終端機的標準處理程序, 但用來與其他 dl 型式的以行為單位的輸入通訊也很有用, 也就是 read 會傳回一整行完整的輸入資料. 行預(yù)設(shè)的終止字元是 nl (ascii lf), 檔案結(jié)束符, 或行終止字元. 預(yù)設(shè)環(huán)境下, cr (是 dos/windows 預(yù)設(shè)的行終止符) 不會終止一行的敘述.

標準的輸入處理程序還可以處理 清除, 刪除字, 重印字元, 及轉(zhuǎn)換 cr 為 nl 等等功能..


非標準輸入程序
非標準輸入程序可以用在需要每次讀取固定數(shù)量字元的情況, 并允許使用字元輸入時間的計時器. 這種模式可以用在讀取固定字元數(shù)量的應(yīng)用程式, 或者所連接的裝置會突然送出大量字元的狀況.

非同步式輸入
以上所敘述的兩種模式都可以用在非同步與同步的傳輸模式. 預(yù)設(shè)是在同步的模式下工作, 也就是在尚未讀取完之前, read 的狀態(tài)會被阻斷. 而非同步模式下 read 的狀態(tài)會直接返回并送出訊號到所叫用的程式直到完成工作. 這個訊號可以由訊號的處理程式 handler...來接收.


等待來自多個訊號來源的輸入
這并不是一個

最好的偵錯你程式碼的方法是建構(gòu)另一臺 linux box, 并把兩臺電腦用 null-modem 纜線連接. 用 miniterm以傳送字元到你的 linux box. miniterm 很容易編譯而它會把所有輸入到鍵盤的字元透過序列埠傳送. 只有這個宣告定義會被檢查 #define modemdevice "/dev/ttys0". 如果是 com1 設(shè)定為 ttys0, 如果是 com2 設(shè)定為 ttys1 等等.. 先前的測試是必要的, 所有的 字元都將以 raw 方式 (不經(jīng)任何處理) 直接傳送. 測試是否連接正確, 在兩臺電腦上都啟動 miniterm 然後隨便在鍵盤上亂按. 在其中一臺上輸入的字元應(yīng)該會顯示在另一臺電腦上反之亦同. 但輸入的字元不會回應(yīng)到與之相連的螢?zāi)簧?

要自制 null-modem 的電纜, 你必需要把 txd (傳送) 及 rxd (接收) 兩線對調(diào).

當然也可以只用一臺電腦來作相同的測試, 只要電腦上有兩個未使用的序列埠. 當然你也就要執(zhí)行兩個 miniterm 來當虛擬控制臺. 如果你是藉由拔去滑鼠來取得另一個序列埠, 記得要把 /dev/mouse 裝置重新導(dǎo)向, 如果它存在的話. 如果你使用多埠的序列埠控制卡, 請確定它已設(shè)定正確. 當我在我的電腦上測試時也曾經(jīng)因為設(shè)定錯誤而出過槌. 當我連到另一臺電腦, 通訊埠開始傳送字元. 就因為剛好這不是完整的非同步式傳輸, 所以可在同一臺電腦上執(zhí)行兩個程式.

連接埠設(shè)定
/dev/ttys* 裝置會被當成連接到你的 linux box 的終端機, 并且在啟動後就設(shè)定好了. 這個觀念在你寫 raw 裝置的通訊程式時必需記住. 也就是說這個連接埠被設(shè)定為回應(yīng)所有自這個裝置送出的字元, 而用在資料傳輸時通常這種要改變這種工作模式.

所有的參數(shù)可以由一個小程式簡單的完成. 設(shè)定參數(shù)被放在一個結(jié)構(gòu)體內(nèi) struct termios, 他的定義檔在 :

#define nccs 19
struct termios {
tcflag_t c_iflag; /* 輸入模式旗標 */
tcflag_t c_oflag; /* 輸出模式旗標 */
tcflag_t c_cflag; /* 控制模式旗標 */
tcflag_t c_lflag; /* 區(qū)域模式旗標 */
cc_t c_line; /* 行控制 (line discipline) */
cc_t c_cc[nccs]; /* 控制特性 */
};

這個檔案也包含所有的旗標定義. 輸入模式旗標在 c_iflag 掌管所有的輸入處理, 這就意謂著由裝置上傳來的字元在還沒用 read 功能讀取前可以先處理過. 同理 c_oflag 掌管所有的輸出處理. c_cflag 包含連接埠的設(shè)定, 如 鮑率, 每字元多少位元, 停止位元, 等等.. 區(qū)域模式旗標放在 c_lflag 用來偵測字元是否回應(yīng), 而訊號會送到你的程式, 等等.. 最後 c_cc 陣列定義了檔案終了的控制字元, 停止, 等等.. 預(yù)設(shè)的控制字元值放在 . 有關(guān)旗標的細節(jié)擺在使用手冊 termios(3). termios 結(jié)構(gòu)體內(nèi)的 c_line 行控制 (line discipline) 元素, 不能在 posix 相容的系統(tǒng)下使用譯者注:這里所說的 line discipline 雖然我翻成 行控制但還是很難說出那是舍. 如果想知道請看看 kernel :( .


序列裝置的輸入觀念
有三個輸入的觀念要說明. 按照所要寫的應(yīng)用程式選用適合的觀念. 盡量避免使用回圈來讀取單一的字元再組成字串. 我曾這樣做過, 會掉字元, 且對 read 而言不會顯示任何錯誤.


標準輸入程序
這是終端機的標準處理程序, 但用來與其他 dl 型式的以行為單位的輸入通訊也很有用, 也就是 read 會傳回一整行完整的輸入資料. 行預(yù)設(shè)的終止字元是 nl (ascii lf), 檔案結(jié)束符, 或行終止字元. 預(yù)設(shè)環(huán)境下, cr (是 dos/windows 預(yù)設(shè)的行終止符) 不會終止一行的敘述.

標準的輸入處理程序還可以處理 清除, 刪除字, 重印字元, 及轉(zhuǎn)換 cr 為 nl 等等功能..


非標準輸入程序
非標準輸入程序可以用在需要每次讀取固定數(shù)量字元的情況, 并允許使用字元輸入時間的計時器. 這種模式可以用在讀取固定字元數(shù)量的應(yīng)用程式, 或者所連接的裝置會突然送出大量字元的狀況.

非同步式輸入
以上所敘述的兩種模式都可以用在非同步與同步的傳輸模式. 預(yù)設(shè)是在同步的模式下工作, 也就是在尚未讀取完之前, read 的狀態(tài)會被阻斷. 而非同步模式下 read 的狀態(tài)會直接返回并送出訊號到所叫用的程式直到完成工作. 這個訊號可以由訊號的處理程式 handler...來接收.


等待來自多個訊號來源的輸入
這并不是一個

相關(guān)IC型號
版權(quán)所有:51dzw.COM
深圳服務(wù)熱線:13751165337  13692101218
粵ICP備09112631號-6(miitbeian.gov.cn)
公網(wǎng)安備44030402000607
深圳市碧威特網(wǎng)絡(luò)技術(shù)有限公司
付款方式


 復(fù)制成功!