搜索
bottom↓
回复: 11

怎么判断串口接收到的字符串完整?

[复制链接]

出0入0汤圆

发表于 2014-3-4 16:32:23 | 显示全部楼层 |阅读模式
用AVR串口接收字符串,此字符串字符数量未知,并且不能更改,AVR怎么判断字符串接收完了?

比如说有字符串A=“ABCDEFG”,如果串口接收到的字符串也是“ABCDEFG”,这时候可以判断它们相等,如果串口接收到的字符串变成了“ABCDEFGH”,怎么判断呢?主要是如何知道,这个字符串接收完了?

不知道要接收的字符串长度就没法判断什么时候接收完了!

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2014-3-4 16:46:30 | 显示全部楼层
A=“007ABCDEFG”

出0入0汤圆

发表于 2014-3-4 16:56:20 | 显示全部楼层
加一个结束字符,'\0'。或超时。或用第一二个字符制定长度。加CRC校验。

出0入0汤圆

发表于 2014-3-4 17:16:19 | 显示全部楼层
问题描述不清楚

出0入0汤圆

发表于 2014-3-4 18:57:45 | 显示全部楼层
一般末尾加‘0D’‘0A’标识结束

出0入0汤圆

发表于 2014-3-4 19:46:10 | 显示全部楼层
既要知道结束又要判别完整性,你最好是添加数据长度和校验

出0入0汤圆

 楼主| 发表于 2014-3-5 08:04:21 | 显示全部楼层
谢谢各位!

关键是接收的字符串不可更改,也就是说“ABCDEFG”这个字符串不可更改,为了判断它,只是防止字符串数量多,少或者是出错。所以判断长度,或者加标识符都不可行啊。

出0入0汤圆

 楼主| 发表于 2014-3-5 08:52:00 | 显示全部楼层
我突然想到,如果把UDA寄存器的数据取出来后,如:rdata[m]=UDR;,UDR寄存器是否为空呢,在UCSRA寄存器里UDRE是不是就能反应UDR现在状态。如果是这样的话,接收完了“ABCDEF”,再判断一下UDR是否还有数据,如果有,就表示超过长度了。

但是如果只发送了“ABCDE”呢?

出0入0汤圆

 楼主| 发表于 2014-3-5 16:11:56 | 显示全部楼层
哎,最后还是使用了超时的方法,效果还不错,谢谢大家了!

出0入13汤圆

发表于 2014-3-8 21:35:39 来自手机 | 显示全部楼层
超时用的多,也很好用
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 00:19

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表