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