[英]Linux serial port reading - can I change size of input buffer?
我正在用C ++編寫Ubuntu Linux上的應用程序來從串口讀取數據。 它通過我的代碼調用select()
然后ioctl(fd,FIONREAD,&bytes_avail)
成功地工作ioctl(fd,FIONREAD,&bytes_avail)
以找出在最終使用read()
獲取數據之前可用的字節數。
我的問題是:每次select
返回數據時,可用的字節數報告為8.我猜這是一個緩沖區大小設置在某處,當這個緩沖區已滿時,select會向用戶返回通知。
我不熟悉Linux作為開發人員(但不是C ++的新手),我試圖研究(沒有成功)是否可以改變這個緩沖區的大小,或者確實如果我的假設是真的。 在我的應用程序中,時序至關重要,只要讀緩沖區中有新字節,我就需要發出警報。 這可能,而不深入研究內核代碼?
您希望使用串行IOCTL TIOCSSERIAL
,它允許更改接收緩沖區深度和發送緩沖區深度(以及其他內容)。 最大值取決於您的硬件,但如果正在使用16550A,則最大緩沖區深度為14。
你可以找到的代碼,做類似的事情你想做的事在這里
最初的鏈接變壞了: http : //www.groupsrv.com/linux/about57282.html新的鏈接必須要做,直到我寫另一個或找到一個更好的例子。
您可以嘗試使用termios結構的c_cc成員的VMIN和VTIME值。 這里有一些信息,特別是在3.2節中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.