0

我有以下问题。我有一个应该与计算机通信的串行端口设备。事实上它是 Arduino Due 板,但我不认为它是相关的。

我使用 CreateFile 打开端口,然后使用 GetCommState()&SetCommState() 和 GetCommTimeouts()&SetCommTimeouts() 设置参数。

端口已正确打开 - 没有问题。但是此时我想检查设备是否已连接。所以我发送了一个特定的消息。该设备应该以某种方式响应,以便我知道它已连接。

现在解决问题:只有在创建端口之后(在发送握手请求之前)放置 Sleep(1000) 才有效。看起来 WinAPI 需要一些时间才能开始使用该端口。因为睡眠解决方案通常不可用,我需要找到一些替代方案......

它不起作用我的意思是 ReadFile 超时。即使超时设置为 5 秒,它也会超时 - 请注意,睡眠间隔仅为一秒。所以看起来握手请求甚至没有发送。如果我将超时设置为 1 秒并将睡眠间隔设置为一秒,它就可以工作。如果我将超时设置为 5 秒但没有睡眠它不起作用。看到问题了吗?

我将尝试一些 NetworkMonitor,但我有点确定问题不在于设备......

4

1 回答 1

0

好的,在发布这个问题之前我可能已经搜索了更多。

问题是,当您从 PC 打开连接时,Arduino 会自行重启。

当您使用终端时,您首先连接并在几秒钟后写入,以便 Arduino 板有足够的时间启动并且您不会注意到这个东西。这让我很困惑,无法写下这个问题。

对此有 3 种解决方案,其中只有 2 种值得一提:

1)我在不知道这一切的情况下使用的解决方案(您等待大约一秒钟让电路板再次启动......) 2)您通过修改您的 Arduino 板禁用自动重置

如果你问我,他们两个都很愚蠢,应该有一个开关或一个闪存变量来做到这一点......

于 2015-03-31T14:18:44.167 回答