如何防止USB传输中的数据丢失?

时间:2019-09-20 23:28:49

标签: c usb libusb

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

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

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

1 个答案:

答案 0 :(得分:0)

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