打印

串口收到数据结束的问题!

[复制链接]
2404|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
areshan|  楼主 | 2011-6-11 11:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家好,手头上有个的程序要用到串口,串口收到的数据不是定长的,有协议规定收到的第3个数表示这段数据的长度。这样我就有2钟方法来判断数据的结束。1,是收到第3个数据后就不停的用收到的数据长度和第3个数比较,当相等的时候,就说明一段数据传输完成了。2.有定时器,在每次收到数据后,就把定时器里的数值清0,当定时器溢出时,说明数据间隔时间超长,也说明数据结束。
不知道2钟那种要好些,第一种是我先采用的,发现麻烦,在串口中断里要判断,第2中是我现在准备用的,感觉简单,就利用数据是一串一串的事实,还能检测数据超时,感觉功能要强大些!
不知道大家有没有遇到过类似的问题了,能不能拿出来一起分享呢?

相关帖子

沙发
leang521| | 2011-6-11 11:30 | 只看该作者
什么协议,最好拿来看看。
modbus比较类似你这种状态,一般使用比对和超时的方法,没收到一个字节定时器清零,同时对数据进行比对。如果超时并且比对正确则认为一个完整数据包。否则包错误。

使用特权

评论回复
板凳
areshan|  楼主 | 2011-6-11 11:34 | 只看该作者
自己做的内部协议:开始位+校验位+数据长度+数据序列号+数据;
用比对也要判断超时吧;要只用超时,得到数据结束没有比对快,但是个人感觉要简单些!

使用特权

评论回复
地板
leang521| | 2011-6-11 12:16 | 只看该作者
如果自己做内部协议,建议从协议本身上下功夫,去查下早期MODEM用的协议,能做到很高速率。

使用特权

评论回复
5
wangyy608| | 2011-6-11 12:59 | 只看该作者
两者结合起来用

使用特权

评论回复
6
PaperKite| | 2011-6-13 21:08 | 只看该作者
也在做一个一主多从的通信,准备用‘addr+crc+包长度’来判断接收的数据,包长度用楼主方法2搞,类似喂狗似的

使用特权

评论回复
7
ningling_21| | 2011-6-14 06:38 | 只看该作者
偶定义了一个协议:str,length,command,0xff,para1,para2,checksum

使用特权

评论回复
8
原野之狼| | 2011-6-14 08:42 | 只看该作者
两种方法都行  也是用的比较多的方法
至于使用哪种 看你的协议要求

使用特权

评论回复
9
xwj| | 2011-6-14 09:01 | 只看该作者
本来两种方法就要同时用,又不冲突。

2楼说的对,不过一般情况下很难走到超时的,超时时绝大多数都是数据错误,

使用特权

评论回复
10
leang521| | 2011-6-14 09:05 | 只看该作者
是的,不管任何协议都有超时错误的。这个必须有

PaperKite你把CRC放前面是不科学的,我无法明了你这个CRC是针对谁的

ningling_21你的协议里面存在常数,也就是标记量,那么必须有一整套协议避免标记量冲突。建议你好好阅读modem使用的协议

使用特权

评论回复
11
johnwjl| | 2011-6-14 10:42 | 只看该作者
两者都用,感觉会靠谱点。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

127

主题

728

帖子

0

粉丝