簡體   English   中英

Linux串口讀取 - 我可以改變輸入緩沖區的大小嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM