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

[复制链接]
3120|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用的协议,能做到很高速率。
wangyy608 发表于 2011-6-11 12:59 | 显示全部楼层
两者结合起来用
PaperKite 发表于 2011-6-13 21:08 | 显示全部楼层
也在做一个一主多从的通信,准备用‘addr+crc+包长度’来判断接收的数据,包长度用楼主方法2搞,类似喂狗似的
ningling_21 发表于 2011-6-14 06:38 | 显示全部楼层
偶定义了一个协议:str,length,command,0xff,para1,para2,checksum
原野之狼 发表于 2011-6-14 08:42 | 显示全部楼层
两种方法都行  也是用的比较多的方法
至于使用哪种 看你的协议要求
xwj 发表于 2011-6-14 09:01 | 显示全部楼层
本来两种方法就要同时用,又不冲突。

2楼说的对,不过一般情况下很难走到超时的,超时时绝大多数都是数据错误,
leang521 发表于 2011-6-14 09:05 | 显示全部楼层
是的,不管任何协议都有超时错误的。这个必须有

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

ningling_21你的协议里面存在常数,也就是标记量,那么必须有一整套协议避免标记量冲突。建议你好好阅读modem使用的协议
johnwjl 发表于 2011-6-14 10:42 | 显示全部楼层
两者都用,感觉会靠谱点。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

127

主题

728

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部