Windows 7中的串口输出缓冲区大小

4
Unix串口有一个大的输出缓冲区。只要缓冲区中有空间,写入调用就会立即返回。当没有足够的空间时,阻塞写入将等待直到缓冲区被清空到某个较低级别。
在Windows 7 SP1中,内置的16550串口似乎没有输出缓冲区。写入似乎会阻塞,直到数据从端口输出。如果有缓冲区,则缓冲区甚至比设备管理器(COM1的高级设置)中设置的16字节还要小。SetupComm函数允许我指定推荐的输入和输出缓冲区大小。但是,输出缓冲区大小似乎不会改变任何行为,并且GetCommProperties始终将dwCurrentTxQueue字段设置为零。SetupComm唯一能做的就是增加输入缓冲区的大小。

机器已经很长时间没有配备串口了。这是一个真正的端口还是实际上是模拟器?请查看设备管理器中的驱动程序。 - Hans Passant
2
是的,这是PC主板上真正的串口。这就是我所说的“内置16550串口”的意思。16550是一种UART芯片,内置端口通常兼容该芯片。 - dreamlayers
1个回答

1

SetupComm的文档明确允许设备驱动程序忽略请求的值。

最好的方法是使用重叠I/O并自行处理缓冲。


文档还说:“例如,即使驱动程序没有分配缓冲区,只要系统的其他部分提供了等效功能,函数仍然可以成功。”我猜那只是一个例子,而不是保证。感谢您提供重叠I/O的想法。 - dreamlayers
在Windows 7中,有一系列鼠标点击不同图标的操作可以显示给定Com端口的缓冲区大小。我现在无法记住那个序列。我知道我以前做过。我在SuperUser上询问了这个问题,但没有得到回应。当我在这个网站上问时,一个声望超过41,000的用户立即责骂我,所以我撤回了这个问题。我们有一个表现不良的应用程序,来自Win'7本身的这些知识(即com端口缓冲区大小)而不是我们自己的应用程序,将对我们有很大帮助。如果有人看到这条消息,请谢谢。 - User.1
@User.1:可能没有通用的方法来确定传输缓冲区的实际大小。您需要查看使用的特定设备驱动程序的文档(如果有)。 - Harry Johnston

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接