【问题标题】:How do I prevent losing data in USB transfers?如何防止在 USB 传输中丢失数据?
【发布时间】:2019-09-20 23:28:49
【问题描述】:

我正在编写一个通过 libusb 直接与 USB 外围设备交互的程序。有问题的设备(除其他外)有一个按钮,上面有一个 LED。我通过异步中断传输读取按钮的状态,然后一旦检测到按下,我将按钮的 LED 设置为打开,直到我检测到按钮已被释放。每次收到更多数据时,我都会进行新的异步中断传输以从设备中读取,因此我可以循环读取设备中的多个事件。

这样做的问题是,除非在生成数据时我在设备上有待处理的读取操作,否则我不会从设备获取数据。也就是说,如果我在按下或释放按钮时没有主动等待读取,那么该数据就会丢失。因为在接收数据和发出另一个异步中断读取请求之间存在一个窗口,所以有时数据会丢失,例如我会收到“按下按钮”事件,但不会收到“按钮释放”事件,即使在我停止按下按钮后,LED 也会保持亮起。

是否有其他方式与设备交互(循环中的中断传输除外)可以保证没有数据丢失,即使在设备生成数据时我没有挂起的读取操作?或者,有没有办法确保没有我没有从设备读取的窗口,并以这种方式防止数据丢失?

【问题讨论】:

  • 欢迎来到 StackOverflow。请按照您创建此帐户时的建议遵循帮助文档中的发布指南。 On topichow to ask 和 ...the perfect question 在此处申请。 StackOverflow 不是设计、编码、研究或教程资源。但是,如果您按照您在网上找到的任何资源,做出诚实的解决方案尝试,并遇到问题,您就会有一个很好的例子可以发布。

标签: c usb libusb


【解决方案1】:

我通过简单地一次调度多个中断传输来解决这个问题,所以当一个返回时,仍然会有另一个在等待数据。我担心如果第二个在第一个安排另一个中断传输之前返回会发生什么,但实际上,这个设备似乎不会发生这种情况。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-11
    • 1970-01-01
    相关资源
    最近更新 更多