繁体   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