这是我第一个使用 WinUsb 驱动程序和库的项目。
我的主机运行 WINDOWS 10,安装了所有更新。
我的高速设备运行三个数据端点:
- OUT 命令端点:主机使用它来发送命令
- IN回复端点:主机接收每个命令的回复
- IN Stream 端点:设备发送流数据,1600 字节,周期为 10 毫秒。
在 Host 应用程序中,有两个相关线程:
- 命令线程向命令管道发送命令并从回复管道接收回复
- Stream 线程从 Stream 管道收集数据
非等待函数用于所有管道。
如果另一个线程被挂起,每个线程都可以完美运行。
但是,如果两个线程同时工作,则流数据会在任意点出现损坏。
更多分析揭示了以下事实:
- 损坏表现为连续的错误字节序列。错误序列的长度大致对应于命令和回复的长度。
- 错误的序列从与数据包边界无关的任意点开始。
- 错误的字节可能不同;有时,它们都是零,有时它们看起来像垃圾。
- 时间分析表明,一旦命令发送到命令管道,就会发生损坏。
如果我实现线程之间的同步,效果就消失了,这样读/写操作在时间上是分开的。但是,这是不可接受的解决方案,我希望两个线程异步工作。
有没有人遇到过这样的影响?