【问题标题】:Serial port output buffer size in Windows 7Windows 7 中的串行端口输出缓冲区大小
【发布时间】:2011-10-24 19:43:31
【问题描述】:

Unix 串行端口有一个大的输出缓冲区。只要缓冲区中有空间,写调用就会立即返回。当没有足够的空间时,阻塞写入会一直等待,直到缓冲区被清空到某个低级别。

在 Windows 7 SP1 中,内置 16550 串行端口的行为就像没有输出缓冲区一样。在数据从端口输出之前,似乎写入阻塞。如果有缓冲区,它甚至比设备管理器中设置的 16 字节(在 COM1 的高级设置中)还要小。 SetupComm 函数让我可以指定输入和输出缓冲区的推荐大小。但是,输出缓冲区大小似乎没有改变任何行为,GetCommProperties 总是将 dwCurrentTxQueue 字段设置为零。 SetupComm 唯一能做的就是增加输入缓冲区的大小。

【问题讨论】:

  • 机器很久没装串口了。这是一个真正的端口还是实际上是一个模拟器?查看设备管理器中的驱动程序。
  • 是的,它是PC主板上的真正串口。这就是我所说的“内置16550串口”的意思。 16550是一种UART芯片,内置端口通常兼容。

标签: windows winapi serial-port serial-communication


【解决方案1】:

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

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

【讨论】:

  • 文档还说“例如,即使驱动程序没有分配缓冲区,只要系统的其他部分提供等效功能,该函数也可以成功。”我想这只是一个例子,而不是保证。感谢重叠 I/O 的想法。
  • 在 Windows 7 中,有一系列的鼠标点击各种图标将显示给定 Com 端口的缓冲区大小。我现在不记得那个顺序了。我知道我以前做过一次。我在 SuperUser 中询问了这个问题,但没有得到回应。当我在本站提问的时候,一个41000以上的用户立刻骂了我,所以我撤回了这个问题。我们有一个行为不端的应用程序,来自 Win'7 本身而不是我们自己的应用程序的这些知识(即 com 端口缓冲区大小)将对我们有很大帮助。如果有人收到此消息,谢谢。
  • @User.1:可能没有任何通用方法来确定传输缓冲区的实际大小。您需要查看正在使用的特定设备驱动程序的文档(如果有)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-26
  • 1970-01-01
  • 2011-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多