!!!以上為暫存檔內容 以下為目前文章內容 請自行合併!!!
作者: ZAXUS (小廢物) 看板: AndroidDev
標題: [問題] 使用pl2303 driver開發uart應用
時間: Thu Dec 3 15:34:24 2020
機器在我送出request後
會回傳json格式的訊息
送出與接受採一問一答
接受與發送間隔2秒
我用
var buffer=byte[1024]
while(inputstream.read(buffer)>0){
sleep(1)
//handle msg
}
偶爾會出現只讀一次就讀到完整訊息
比較常出現loop第一次讀到一半
第二段就亂掉了的情況
我試過調整sleep長短和buffer大小
發送時也有flush()
但還是會這種情形發生
正常的時候可以持續很久
收到不完全的msg也會持續相同的情況
想請教可能是哪邊出問題了
謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 223.136.166.223 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/AndroidDev/M.1606980866.A.1A8.html
1F:→ kobe8112: 你收送是恆定大小或不定大小?為啥需要在這裏面睡覺 12/03 18:24
2F:→ ZAXUS: 不定大小,不睡的情況也一樣耶 12/03 20:16
3F:→ kobe8112: 我是指你睡的時機我覺得奇怪, 12/04 12:46
4F:→ kobe8112: 我自己寫是通訊分指令跟資料封包,指令恆定大小, 12/04 12:47
5F:→ kobe8112: 資料不定大小,因此可藉由前一項指令知道接下來要收多少 12/04 12:48
6F:→ kobe8112: 你如果是永遠不定大小,但至少每一次的最大傳輸時間可以 12/04 12:49
7F:→ kobe8112: 估計吧? 應該是讀取執行緒固定睡這個時間,醒來時將所有 12/04 12:50
8F:→ kobe8112: 緩衝區資料讀入,且必為一完整訊息,當然前提是通訊時序 12/04 12:51
9F:→ kobe8112: 符合你說的一問一答,也就是不會有「讀取執行緒正在睡覺 12/04 12:51
10F:→ kobe8112: 時,機器端傳了2組以上訊息」的情況 12/04 12:52
11F:推 askacis: read有檢查收到多少嗎?有時候硬體 fifo長度不夠會分好幾 12/18 01:15
12F:→ askacis: 次送,你要自己組成你要的封包,再來就是 uart 速度,跟 12/18 01:15
13F:→ askacis: xon xoff 等有設對嗎? 12/18 01:15
14F:→ ZAXUS: 我後來換driver解決了...謝謝各位的建議 12/21 11:54
※ 編輯: ZAXUS (223.140.187.254 臺灣), 01/08/2021 10:41:01