!!!以上为暂存档内容 以下为目前文章内容 请自行合并!!!
作者: 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/cn.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