我在PC上創建了一對虛擬串口,分別打開兩個串口助手進行通信,無論多少位元組的資料都可以順利收發。
然后我將其中一個串口掛載到一個Android模擬器上,使用串口助手與模擬器進行通信。少于或等于8位元組的資料是可以順利收發的。一旦用串口助手向模擬器發送大于8位元組的資料,應用就會卡住,沒反應,然后模擬器就掛了。
應用程式是依賴Google的android-serialport-api,應該不是應用程式的問題,我拿了別人寫的apk測驗過,甚至是Google自己的apk測驗,都是這樣的結果。
我看網上有說是串口設備的接識訓沖區的大小的問題,那使用串口助手就沒問題,是Android模擬器的緣故嗎?
關于串口通信還有很多不明白的地方,希望大神幫忙解答!!
uj5u.com熱心網友回復:
還有如果是接識訓沖區大小的問題,那超過8位元組的資料為什么不會分兩次接收到呢?難不成是這個庫的問題?uj5u.com熱心網友回復:
在網上找到一篇文章(https://dp2px.com/2019/06/12/virtualserial/),是采用Genymotion模擬器掛載串口實作串口通信的,我按照文章所說的實踐了,發現這個問題就不存在了,果然是Android原生模擬器的問題么?uj5u.com熱心網友回復:
估計是你接收出現了問題,大于8位元組的資料流導致你接收執行緒卡死了或報錯了,不過還是問一句,你設定了緩沖區了沒??uj5u.com熱心網友回復:
你說的是讀取的緩沖區的大小么?是這個么?
mReadBuffer = new byte[1024];
程式卡死的時候我看日志里也沒報錯
uj5u.com熱心網友回復:
應該還是硬體的問題吧?我剛把大小設定為7測驗了下,mReadBuffer = new byte[7],發送8位元組資料時會分兩次收到uj5u.com熱心網友回復:
要粘包哦,根據你的位元組長度,來截取你所要的東西uj5u.com熱心網友回復:
我們應用跟串口通信都是41個位元組,發送和接收都是41個,沒有什么問題啊。正常應該是,你發過去的資料,第一個是長度吧,告訴串口設備讀取的長度。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/77156.html
標籤:Android
下一篇:關于微信公眾號開發遇到的問題
