綁定帳號登入

Android 台灣中文網

打印 上一主題 下一主題

[求助] 讀取陣列資料錯位問題

[複製連結] 查看: 963|回覆: 0|好評: 0
跳轉到指定樓層
樓主
hamx | 收聽TA | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
發表於 2014-6-4 16:22

馬上加入Android 台灣中文網,立即免費下載應用遊戲。

您需要 登錄 才可以下載或查看,沒有帳號?註冊

x
我有一個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 就來APK.TW」,快來加入粉絲吧!
Android 台灣中文網(APK.TW)
收藏收藏 分享分享 分享專題
用Android 就來Android 台灣中文網(https://apk.tw)
回覆

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則