Linux 串口编程三 使用termios与API进行串口程序开发
在 termios 結(jié)構(gòu)體以及內(nèi)部終端控制標(biāo)志中,并非所有的參數(shù)對(duì)于實(shí)際的物理串口都是有效的,在使用過(guò)程中也不需要對(duì)于所有標(biāo)志的作用都有所理解。事實(shí)上,快速掌握一項(xiàng)技術(shù)的核心點(diǎn)也是一種學(xué)習(xí)能力。對(duì)于使用,熟悉并掌握操作框架十分有用。對(duì)于串口編程,核心步驟也十分鮮明,下面首先介紹 termios 相關(guān)的 API 函數(shù)。
核心配置函數(shù)
1. int tcgetattr(int fd, struct termios *termios_p);
函數(shù)功能:獲取當(dāng)前終端接口配置并將配置寫入?yún)?shù) termios_p 指向的 termios 結(jié)構(gòu)體。一般操作時(shí)將配置保存為 old_termios,可以在需要時(shí)通過(guò) tcsetattr 函數(shù)對(duì)終端接口進(jìn)行重新配置。
2.?int tcsetattr(int fd, int actions, const struct termios *termios_p);
函數(shù)功能:使用 termios_p 指向的 termios 結(jié)構(gòu)體對(duì)終端接口進(jìn)行配置,參數(shù) actions 控制修改方式,共有3種修改方式,如下所示:
- TCSANOW:立刻對(duì)配置進(jìn)行修改。
- TCSADRAIN:等當(dāng)前輸出完成后再對(duì)配置進(jìn)行修改。
- TCSAFLUSH:等當(dāng)前輸出完成后再對(duì)配置進(jìn)行修改,但丟棄還未從 read 調(diào)用返回的當(dāng)前可用的任何輸入。
終端速度函數(shù)
1.speed_t cfgetispeed(const struct termios *);
函數(shù)功能:獲取終端讀取速度。
2.speed_t cfgetospeed(const struct termios *);
函數(shù)功能:獲取終端輸出速度。
3.int cfsetispeed(const struct termios *, speed_t speed);
函數(shù)功能:設(shè)置終端讀取速度。
4.int cfgetispeed(const struct termios *, speed_t speed);
函數(shù)功能:設(shè)置終端輸出速度。
Note:輸入與輸出速度是分開控制的;根據(jù)函數(shù)形參,這些函數(shù)只作用于 termios 結(jié)構(gòu),而不是直接作用于設(shè)備。因此如果要設(shè)置速度,就要首先使用 tcgetattr 獲取當(dāng)前終端配置,然后使用上述函數(shù)設(shè)置速度,最后使用 tcsetattr 將 termios 配置寫入設(shè)備。此外,還要注意系統(tǒng)支持的波特率范圍,通過(guò)查看 termios.h 可以獲取到。
其他控制函數(shù)
1.int tcdrain(int fd);
函數(shù)功能:讓調(diào)用程序一直等待,直到所有排隊(duì)的輸出都已發(fā)送完畢。
2.int tcflow(int fd, int flowtype);
函數(shù)功能:用于暫停或重新開始輸出。
3.int tcflush(int fd, int in_out_selector);
函數(shù)功能:用于清空輸入、輸出或者兩者同時(shí)清空。
Note:如果串口程序發(fā)生阻塞,檢查程序中是否調(diào)用了上述 API。在打開終端或者串口設(shè)備之前,對(duì)應(yīng)的輸入或者待輸出數(shù)據(jù)緩存在驅(qū)動(dòng)程序中,因此要根據(jù)實(shí)際需求選擇是否調(diào)用 tcflush 清空相應(yīng)緩沖區(qū)數(shù)據(jù)。關(guān)于終端串口 API 函數(shù)的講解本篇就到這里,在實(shí)際應(yīng)用開發(fā)中必須明確程序中配置的標(biāo)志位和函數(shù)的作用,在不確定作用的情況下最好保持默認(rèn)設(shè)置。
關(guān)于 Linux 串口編程的其他文章,可以移步至以下鏈接:
有想法或者疑問(wèn)可以給我郵件或者評(píng)論,覺(jué)得本文對(duì)你有幫助就點(diǎn)贊吧~:-D
總結(jié)
以上是生活随笔為你收集整理的Linux 串口编程三 使用termios与API进行串口程序开发的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 十种代码字体
- 下一篇: linux 进程开始与终止