[问题] 使用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