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