Linux 串列埠程式設計 使用termios與API進行串列埠程式開發
在 termios 結構體以及內部終端控制標誌中,並非所有的引數對於實際的物理串列埠都是有效的,在使用過程中也不需要對於所有標誌的作用都有所理解。事實上,快速掌握一項技術的核心點也是一種學習能力。對於使用,熟悉並掌握操作框架十分有用。對於串列埠程式設計,核心步驟也十分鮮明,下面首先介紹 termios 相關的 API 函式。
核心配置函式
1. int tcgetattr(int fd, struct termios *termios_p);
函式功能:獲取當前終端介面配置並將配置寫入引數 termios_p 指向的 termios 結構體。一般操作時將配置儲存為 old_termios,可以在需要時通過 tcsetattr 函式對終端介面進行重新配置。
2. int tcsetattr(int fd, int actions, const struct termios *termios_p);
函式功能:使用 termios_p 指向的 termios 結構體對終端介面進行配置,引數 actions 控制修改方式,共有3種修改方式,如下所示:
- TCSANOW:立刻對配置進行修改。
- TCSADRAIN:等當前輸出完成後再對配置進行修改。
- TCSAFLUSH:等當前輸出完成後再對配置進行修改,但丟棄還未從 read 呼叫返回的當前可用的任何輸入。
終端速度函式
1.speed_t cfgetispeed(const struct termios *);
函式功能:獲取終端讀取速度。
2.speed_t cfgetospeed(const struct termios *);
函式功能:獲取終端輸出速度。
3.int cfsetispeed(const struct termios *, speed_t speed);
函式功能:設定終端讀取速度。
4.int cfgetispeed(const struct termios *, speed_t speed);
函式功能:設定終端輸出速度。
Note:輸入與輸出速度是分開控制的;根據函式形參,這些函式只作用於 termios 結構,而不是直接作用於裝置。因此如果要設定速度,就要首先使用 tcgetattr 獲取當前終端配置,然後使用上述函式設定速度,最後使用 tcsetattr 將 termios 配置寫入裝置。此外,還要注意系統支援的波特率範圍,通過檢視 termios.h 可以獲取到。
其他控制函式
1.int tcdrain(int fd);
函式功能:讓呼叫程式一直等待,直到所有排隊的輸出都已傳送完畢。
2.int tcflow(int fd, int flowtype);
函式功能:用於暫停或重新開始輸出。
3.int tcflush(int fd, int in_out_selector);
函式功能:用於清空輸入、輸出或者兩者同時清空。
Note:如果串列埠程式發生阻塞,檢查程式中是否呼叫了上述 API。在開啟終端或者串列埠裝置之前,對應的輸入或者待輸出資料快取在驅動程式中,因此要根據實際需求選擇是否呼叫 tcflush 清空相應緩衝區資料。關於終端串列埠 API 函式的講解本篇就到這裡,在實際應用開發中必須明確程式中配置的標誌位和函式的作用,在不確定作用的情況下最好保持預設設定。
關於 Linux 串列埠程式設計的其他文章,可以移步至以下連結:
- 《Linux 串列埠程式設計<一> 一些背景》
- 《Linux 串列埠程式設計<二> 深入瞭解 termios》
- 《Linux 串列埠程式設計<三> 使用termios與API 進行串列埠程式開發》
- 《Linux 串列埠程式設計<四> 串列埠裝置程式開發》
有想法或者疑問可以給我郵件或者評論,覺得本文對你有幫助就點贊吧~:-D
相關文章
- Linux串列埠程式設計Linux串列埠程式設計
- Android之串列埠程式設計Android串列埠程式設計
- Uart進行的串列埠收發串列埠
- ROS串列埠程式設計學習筆記ROS串列埠程式設計筆記
- 沒有真實串列埠裝置時使用"虛擬串列埠驅動"除錯你的串列埠程式碼串列埠除錯
- linux 串列埠通訊Linux串列埠
- 通過串列埠進行通訊 :串列埠
- gdbserver連線Ubuntu除錯程式(使用串列埠)ServerUbuntu除錯串列埠
- 串列埠屏開發曲線串列埠
- Linux下串列埠監視Linux串列埠
- Xamarin.Forms-手機串列埠除錯程式開發文件ORM串列埠除錯
- 迪文屏OS彙編程式碼開發-串列埠篇串列埠
- 串列埠blog串列埠
- 串列埠UART串列埠
- 帶內串列埠 在串列埠中輸入命令串列埠
- UART串列埠及Linux實現串列埠Linux
- linux串列埠命令列除錯Linux串列埠命令列除錯
- 串列埠資料抓取及串列埠通訊模擬串列埠
- 你真的瞭解串列埠嗎(示波器串列埠波形分析)串列埠
- 使用Modbus4J進行RTU模式串列埠通訊模式串列埠
- 串列埠通訊利器:SerialPortStream庫詳解,輕鬆實現C#串列埠開發串列埠C#
- 串列埠通訊串列埠
- 串列埠收發UART(Verilog HDL)串列埠
- QT實現串列埠助手中串列埠名的實時更新QT串列埠
- 【STM32】串列埠串列埠
- Android 串列埠通訊Android串列埠
- 串列埠小工具串列埠
- RHEL6.8程式單印表機串列埠檢查串列埠
- 如何使用Java串列埠進行資料通訊及應用案例Java串列埠
- C#如何開發透過USB進行串列埠通訊的Androud上位機C#串列埠
- 03_QT上位機開發之串列埠助手QT串列埠
- 【linux學習--工具篇】串列埠除錯工具Linux串列埠除錯
- 11. 串列埠通訊串列埠
- (10)uart串列埠通訊串列埠
- 串列埠通訊型別串列埠型別
- 串列埠通訊協議串列埠協議
- 串列埠,COM口,UART,USART串列埠
- ubuntu繫結串列埠號Ubuntu串列埠
- RT-Thread 使用env修改Finsh 串列埠thread串列埠