[問題] 使用pl2303 driver開發uart應用

作者: ZAXUS (YehSeafood)   2020-12-03 15:34:24
機器在我送出request後
會回傳json格式的訊息
送出與接受採一問一答
接受與發送間隔2秒
我用
var buffer=byte[1024]
while(inputstream.read(buffer)>0){
 sleep(1)
//handle msg
}
偶爾會出現只讀一次就讀到完整訊息
比較常出現loop第一次讀到一半
第二段就亂掉了的情況
我試過調整sleep長短和buffer大小
發送時也有flush()
但還是會這種情形發生
正常的時候可以持續很久
收到不完全的msg也會持續相同的情況
想請教可能是哪邊出問題了
謝謝
作者: kobe8112 (小B)   2020-12-03 18:24:00
你收送是恆定大小或不定大小?為啥需要在這裏面睡覺
作者: ZAXUS (YehSeafood)   2020-12-03 20:16:00
不定大小,不睡的情況也一樣耶
作者: kobe8112 (小B)   2020-12-04 12:46:00
我是指你睡的時機我覺得奇怪,我自己寫是通訊分指令跟資料封包,指令恆定大小,資料不定大小,因此可藉由前一項指令知道接下來要收多少你如果是永遠不定大小,但至少每一次的最大傳輸時間可以估計吧? 應該是讀取執行緒固定睡這個時間,醒來時將所有緩衝區資料讀入,且必為一完整訊息,當然前提是通訊時序符合你說的一問一答,也就是不會有「讀取執行緒正在睡覺時,機器端傳了2組以上訊息」的情況
作者: askacis (ASKA)   2020-12-18 01:15:00
read有檢查收到多少嗎?有時候硬體 fifo長度不夠會分好幾次送,你要自己組成你要的封包,再來就是 uart 速度,跟xon xoff 等有設對嗎?
作者: ZAXUS (YehSeafood)   2020-12-21 11:54:00
我後來換driver解決了...謝謝各位的建議

Links booklink

Contact Us: admin [ a t ] ucptt.com