社区
网络及通讯开发
帖子详情
如何判定串口接收数据完成?
nopart
2008-11-24 08:56:19
用的是MSCOMM控件,首先上位机向下位机发送一个读数据的命令,然后下位机向上位机返回数据,该数据有上千字符,并且以 \r\n 结尾。那么怎么判断数据已经全部接收到接收缓冲区中了呢?
虽然用一个延时可以保证数据全部被接收,但我觉得这不是保险的办法。
...全文
816
11
打赏
收藏
如何判定串口接收数据完成?
用的是MSCOMM控件,首先上位机向下位机发送一个读数据的命令,然后下位机向上位机返回数据,该数据有上千字符,并且以 \r\n 结尾。那么怎么判断数据已经全部接收到接收缓冲区中了呢? 虽然用一个延时可以保证数据全部被接收,但我觉得这不是保险的办法。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
i_love_pc
2008-11-25
打赏
举报
回复
这个还要看协议的制定,可以在每个数据包的包头设置一个命令字,通过命令字来检测。
Jim@luckeeinc.com
2008-11-25
打赏
举报
回复
這種東西最好數據有固定的報文格式
嚴格規定什麽開頭 什麽結束
對不合法的接受到的報文格式直接忽略
比如
A000 1234 5678 0100
前4位是固定的開頭 后4位為校驗位
以後抓數據抓來之後就取中間的那一快
chouyuanming
2008-11-25
打赏
举报
回复
傳送端在傳送資料時, 可以記得在結尾處加上一個字符"0x13", 表示傳送終止!!
如果你能夠逐字接收字符, 那麼應該就能判斷, 例如:
if(byte[x]==0x13)
終止接收;
MAJIA1918
2008-11-25
打赏
举报
回复
用线程循环接受就可以了,至于结束符,由你和下位机的协议来定
springworker
2008-11-25
打赏
举报
回复
我曾经接触过的一个是下位机有一个接收的协议,例如aa,当上位机接收到aa时就表示接收完毕了。没有用到延时
hnzlk
2008-11-25
打赏
举报
回复
举个例子,我没用过mscomm
int n=mscomm1->readbuf(buf,4096);
for(int i=0;i<n;i++)
{
if(buf[i]=="\n" && buf[i-1]=="\r")
ShowMessage("接收完毕");
}
睿音
2008-11-25
打赏
举报
回复
既然是以\r\n结尾,那就可以直接判断\r\n就可以了。对于还没有接收完的时候,可以自己开一个队列来进行缓冲。
TripH0101
2008-11-25
打赏
举报
回复
接收一个就比较一次
moonfeel
2008-11-24
打赏
举报
回复
楼上所言即是,我只是想知道怎么判断已经接收到这个字符。以前没做过串口,所以不太明白。
TripH0101
2008-11-24
打赏
举报
回复
下位机发一个结束字符不就OK了,上位机接收到这个字符就知道发送结束了
nopart
2008-11-24
打赏
举报
回复
而且要说明的是,返回的数据长度并不是固定的,但是结尾是固定。
单片机串口——队列的使用
博客围绕单片机开发中
串口接收
数据
的处理展开。介绍了使用队列
数据
结构保存上一帧
数据
,阐述了队列的新建、出/入队函数及初始化函数等。说明了接收机制,包括
数据
入队出队指针变化、一帧
数据
完成
的
判定
,还提及利用定时器计时和标志位监控,主函数轮询处理
数据
。
串口接收
文件
数据
实现以及
判定
接收
完成
的方法
本文介绍了两种通过串口传输文件的方法。一种是在文件尾添加结束标志,并约定接收方解析特定的协议头,确保
数据
完整性和安全性;另一种是通过监测接收
数据
的字节数变化,在一段时间内未接收到新
数据
时判断传输结束。
串口
数据
实时处理:定时器+串口 判断串口
数据
接收
完成
本文介绍了一种基于定时器的串口
数据
接收方法,通过计算波特率对应的
数据
接收时间,确保串口
数据
的完整接收。该方法适用于
数据
密集且延迟要求小的场景。
串口中断接收
数据
方式
本文介绍了两种单片机中断处理方法:一是通过全局标志位处理耗时的中断事件;二是针对固定长度少量
数据
接收,关闭中断进行连续读取直至
完成
。文章详细展示了中断服务函数的编写方式。
单片机串口——如何
判定
接收一帧
数据
的
完成
文章讨论了在单片机处理
串口接收
不定长
数据
时如何判断
数据
包
完成
的问题。提到了两种常见方法:1)使用定时器,在指定时间间隔无新
数据
时认为接收
完成
;2)利用帧头帧尾标识。这两种方法都需主程序参与判断,可能增加其负担。对于无固定帧头帧尾的情况,可通过检测
数据
间隔来判断。文章还举例介绍了如何配置定时器以及使用串口空闲中断来实现
数据
帧的识别。
网络及通讯开发
1,317
社区成员
8,874
社区内容
发帖
与我相关
我的任务
网络及通讯开发
C++ Builder 网络及通讯开发
复制链接
扫一扫
分享
社区描述
C++ Builder 网络及通讯开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章