2

以下代码位于线程内,并读取来自 USB 的输入数据。大约每 80 个读数它就会丢失一个来自 stm32 板的数据包。该板被编程为每隔一秒向安卓平板电脑发送数据包。

// Non Working Code
while(running){
    int resp = bulktransfer(mInEp,mBuf,mBuf.lenght,1000);
    if(resp>0){
        dispatchMessage(mBuf);
    }else if(resp<0)
        showsBufferEmptyMessage();
} 

我正在寻找 android 和 Internet 上的其他库中的 Missile Launcher 示例,他们在每次轮询之间设置了 50 毫秒的延迟。这样做可以解决缺少包的问题。

  //Working code
  while(running){
     int resp = bulktransfer(mInEp,mBuf,mBuf.lenght,1000);
     if(resp>0){
        dispatchMessage(mBuf);
    }else if(resp<0)
        showsBufferEmptyMessage();
   try{
       Thread.sleep(50);
   }catch(Exception e){}
  }

有谁知道延迟起作用的原因。正如我在谷歌示例之前提到的那样,github 上的大多数库都有这种延迟。

4

1 回答 1

2

我正在写下关于这个问题的结果。毕竟似乎 UsbConnection.bulkTransfer(...) 方法在连续调用时有一些错误。解决方案是使用异步 API UsbRequest 类。使用这种方法,我可以毫无延迟地从输入端点读取数据,并且在整个压力测试期间没有数据丢失。所以采取的方向是异步UsbRequest,而不是同步bulktransfer。

于 2014-08-27T23:10:33.740 回答