Android 台灣中文網

標題: 讀取陣列資料錯位問題 [打印本頁]

作者: hamx    時間: 2014-6-4 16:22
標題: 讀取陣列資料錯位問題
我有一個usb device 內含感測元件,資料長度固定為17 bytes,byte的value隨時更新,資料型態為UART format;
當usb device插入平板,usbDevice這個textview可以顯示正確的數值,但三不五時(random發生)整個String會錯位,
封包頭(rbuf[0])不見了,第二個byte(rbuf[1])往前移位,變成第一個byte,後面的也全部往前移一位,出現時間非常短暫,
約100 ~ 200ms,又恢復正常,且重複發生,又無明確間隔。
我嘗試調整 Thread.sleep(675) 的值,只能延緩錯位發生機率,無法百分百debug。
以一個初學者的角度觀察,似乎是usb device傳入陣列資料的timing,與Thread更新UI的速度沒有匹配(同步),
Thread更新UI時,正好usb device尚未完整傳入整個封包。
不知以上判斷是否正確?請問各先進有沒有解決方法?在此先謝謝了!
我的部份code如下:

@Override
public void onCreate(Bundle savedInstanceState)
{
  super.onCreate(savedInstanceState);            
    setContentView(R.layout.activity_main);
.
.
.
  mDataHandler = new Handler()
  {
   public void handleMessage(Message msg)
   {
     super.handleMessage(msg);
      switch (msg.what)
      {                    
       case MainActivity.usb:
        int len = 17;
         short rbuf[] = new short[4096];
          len = mDriver.read(rbuf);
           sbHex = new StringBuilder();
            if(len >0)
           {         
             for (int j = 0; j < len; j++)  
            {
              String temp = Integer.toHexString(rbuf[j]);
               sbHex.append(temp);
               }
             }
                usbDevice.setText(sbHex);
               }
             }
           };
              mDataThread = new DataThread();         
                mDataThread.start();
}

    class DataThread extends Thread
    {
      public void run()
      {   
        super.run();          
         try
         {  
          do
          {                        
           Thread.sleep(675);
            msg = new Message();
             msg.what = MainActivity.usb;
              mDataHandler.sendMessage(msg);
              }
               while(this !=null);
               }
                catch(InterruptedException e)
                {
                 e.printStackTrace();
                 }
                }            
               }





歡迎光臨 Android 台灣中文網 (https://apk.tw/) Powered by Discuz! X3.1