【发布时间】:2019-02-18 13:45:20
【问题描述】:
我正在使用 Win32 API 从串口读取数据:
DWORD numRead = 0;
ReadFile(mPortHandle, mReceiveBuffer.get(), mReceiveBufferSize, &numRead, nullptr);
这个调用需要非常长的时间:准确来说需要 129 毫秒(通过 QueryPerformanceCounter 测量)。
我使用几种不同的硬件设备进行了测量:
- 带有 FTDI 芯片组的 USB 适配器
- 带有多产芯片组的 USB 适配器
- PCI express RS232 卡
- 主板板载串口
这些设备中的每一个都给了我完全相同的延迟:129 毫秒。因此,我不认为它是硬件或驱动程序的错误(每个设备应该使用完全不同的驱动程序,对吧?)。
我也摆弄了超时,但这并没有改变任何东西。
还能是什么?
【问题讨论】:
-
从串口读取很慢;这并不奇怪。您使用的波特率是多少?
-
目前我使用的是 115200 Bd。但实际上没有数据进来,所以 ReadFile 返回 0 Bytes。什么都不做仍然需要大约 130 毫秒。
-
@Boris -
NtReadFile真的返回STATUS_TIMEOUT我猜如果你有 0 个字节/你需要先设置 COMMTIMEOUTS
标签: winapi serial-port readfile