我正在编写一些代码以与一块硬件接口。硬件通过USB连接到设备内的USB到串行转换器(在Windows中显示为COM端口设备)。

我在Win32 API读取系统调用中遇到问题。我似乎无法像宣传那样工作。我已经设置了通勤结构:

COMMTIMEOUTS ct;
ct.ReadIntervalTimeout = MAXDWORD;
ct.ReadTotalTimeoutconstant = 0;
ct.ReadTotalTimeoutMultiplier = 0;
ct.WriteTotalTimeoutConstant = 0;
ct.WriteTotalTimeoutMultiplier = 0;

if(SetCommTimeouts(device_id_, &ct) == 0)
{
     return ERROR; // this is never hit.
}

根据Win32 API文档,该文档说:

ReadIntervalTimeOut

在两个字节在通信线上的到达之间,以毫秒为单位,允许的最大时间可以通过。在ReadFile操作期间,收到第一个字节时的时间段开始。如果任何两个字节的到达之间的间隔超过此金额,则 readfile 操作已完成,并返回任何缓冲数据。零值表示不使用间隔超时。

maxdword的值,与两个 readTotalTimeOutConstantreadTotalTimeOutMultiplier 成员,指定读取操作是要立即使用已经收到的字节返回,即使没有收到字节。

我发送的命令应该返回一个字节整数。在大多数情况下,设备收到命令,并返回适当的值。但是,有时候,它似乎不会返回一个值和readfile()块,直到收到更多字节为止(例如,按下设备上的按钮)。按下按钮后,我期望收到我将收到的初始整数响应以及按钮按代码。虽然这不是我期望设备本身的行为,但根据MSDN文档,我更关心ReadFile()阻止。这里有readfile()阻止的补救措施吗?

有帮助吗?

解决方案

哦!事实证明,ReadFile阻塞只是一种症状,而不是问题。所讨论的硬件设备中只有一个4MHz处理器。将写入设备的3个字符命令分开,并在字符之间暂停1毫秒的单独发送问题。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top