社区
单片机/工控
帖子详情
两个串口同时使用的情况下,怎样才能保证不会丢失数据?
rszqy
2011-11-21 03:49:22
串口1在做周期性的发送与接收,串口2接收数据的时间是随机的。怎样才能保证两个串口都能正常使用,
不会出现出错和丢失数据的情况?
...全文
1078
11
打赏
收藏
两个串口同时使用的情况下,怎样才能保证不会丢失数据?
串口1在做周期性的发送与接收,串口2接收数据的时间是随机的。怎样才能保证两个串口都能正常使用, 不会出现出错和丢失数据的情况?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
rszqy
2011-11-24
打赏
举报
回复
1
搞定
第一:中断服务程序要尽可能短
第二:串口2中断优先级要比串口1高,并且开中断嵌套
Simality
2011-11-22
打赏
举报
回复
[Quote=引用 5 楼 rszqy 的回复:]
回复1楼:你说的独立缓冲区FIFO怎么实现呢?对于串口2,我现在是用一个char数组来存放数据,以‘\n’作为结束标志。然后设置一个接收完成标志,在主循环里判断该做什么反应。串口2的发送可以设置在串口1没有通信的时候发送,所以串口2的发送是没有问题的。
串口1也给主循环预留了足够长的时间。
现在的情况是串口1正常工作,而串口2的接收有时有丢失数据的情况。
[/Quote]
软FIFO跟你那个数组原理差不多,只不过写入和读出分别用一个指针操作。就保留你现在这个结构也无大碍。串口2丢数据的问题要看串口2两次接收中断之间这段时间有多长,串口2的中断ISR执行时间多长。最好搞个监视用的IO口,拿示波器看看。
woshi_ziyu
2011-11-22
打赏
举报
回复
[Quote=引用 3 楼 alex_rcpilot 的回复:]
1楼都说了,支持。
原则就是中断服务尽量短。
用FIFO管理是非常有效的手段。
[/Quote]
++
noodle123
2011-11-22
打赏
举报
回复
[Quote=引用 1 楼 liangboone 的回复:]
(1) 每个串口的接受和发送都设置一个独立缓冲区FIFO,长度根据具体的应用来定。
(2) 周期性的发送和接受,你发送和接受一帧数据之后,预留一定的时间给主程序去准备和处理数据,应该就不会出现数据的丢失。
(3) 对于串口2的随机性的收发,中断接受发送函数尽量短,接受时,可以先放入对应的缓冲区,接受完毕,设置对应标志,到主程序中判断。如果此时又有数据过来,中断中将其放入下一个FIFO中。理论……
[/Quote]支持一下。然后还可以注意:
1、可以使用独有的帧头标识,如果需要的数据与帧头相同,则使用其它字符转义。这样可以从根本上保证数据的正确性、不会错位接收,当然复杂度比一般的直接接受要高一些。
2、楼主的不牵涉到这一点:
如果两个串口标准相同,并且直接相连(简单测试时),记得将A的Tx连接B的Rx,A的Rx连接B的Tx,对调一下连接。
如果两个串口标准不同,那么直接用A的Tx连接B的Tx,A的Rx连接B的Rx即可。
rszqy
2011-11-21
打赏
举报
回复
回复2楼:好像没有硬件buff,就一个字节的接收缓冲,
事实上我说的两个串口是两个总线控制的8251A。
rszqy
2011-11-21
打赏
举报
回复
回复1楼:你说的独立缓冲区FIFO怎么实现呢?对于串口2,我现在是用一个char数组来存放数据,以‘\n’作为结束标志。然后设置一个接收完成标志,在主循环里判断该做什么反应。串口2的发送可以设置在串口1没有通信的时候发送,所以串口2的发送是没有问题的。
串口1也给主循环预留了足够长的时间。
现在的情况是串口1正常工作,而串口2的接收有时有丢失数据的情况。
schlafenhamster
2011-11-21
打赏
举报
回复
实在不行用流控制
Simality
2011-11-21
打赏
举报
回复
1楼都说了,支持。
原则就是中断服务尽量短。
用FIFO管理是非常有效的手段。
AnYidan
2011-11-21
打赏
举报
回复
两个串口,各有个的buffer(硬件),如果硬件提供双层 buffer,中断程序比较合理(只接收转存数据),应该没有问题,
当然,再能从协议上保证那最好
liangboone
2011-11-21
打赏
举报
回复
(1) 每个串口的接受和发送都设置一个独立缓冲区FIFO,长度根据具体的应用来定。
(2) 周期性的发送和接受,你发送和接受一帧数据之后,预留一定的时间给主程序去准备和处理数据,应该就不会出现数据的丢失。
(3) 对于串口2的随机性的收发,中断接受发送函数尽量短,接受时,可以先放入对应的缓冲区,接受完毕,设置对应标志,到主程序中判断。如果此时又有数据过来,中断中将其放入下一个FIFO中。理论上设置合适的FIFO长度,数据是不会丢失的。
C#
串口
通信(彻底解决C#
串口
通信中的
数据
丢失
问题)
### C#
串口
通信详解与
数据
丢失
问题的解决方法 #### 概述
串口
通信是一种常见的设备间
数据
传输方式,在工业控制、自动化测试等领域应用广泛。然而,在
使用
C#进行
串口
通信开发时,很多开发者都遇到过
数据
丢失
的问题...
c#_多线程
串口
通讯_快速采集
多线程在本项目中的作用是提高
数据
采集的并行性,使得程序能够同时从多个
串口
设备接收
数据
,从而显著提升
数据
处理速度。为了确保线程间的安全性和避免资源冲突,还需
使用
锁(如`Mutex`、`Semaphore`或`Monitor`)等...
hal 双
串口
同时接收
丢失
数据
_如何写一个健壮且高效的
串口
接收程序?(三)...
上两篇文章介绍了设计
串口
协议的基础知识,接下来的几篇将介绍在编写调试
串口
代码时可能遇到的一些问题。以下内容
不会
用太多的笔墨描述如何写发送、接收函数,而是重点关注
串口
接收过程中可能遇到的一些问题,如果说...
【STM32】双
串口
同时收发
数据
数据
丢失
问题
经过排查发现,在
串口
2的中断里进行打印,最后发现一定量
数据
后这个中断居然不触发了,最后盯上了。,怀疑会
不会
是中断标识没清除,直接把这个中断标志移动到开始,问题解决。我是从这句话上得到的灵感,但是我的...
C#
串口
通信
数据
丢失
解决方案
但这种方法的缺点是,在
串口
高速率大信息量通信时,会出现
丢失
数据
的
情况
。
丢失
数据
的原因是
数据
接收和
数据
处理再同一个线程中,如果
数据
处理的时间太长,则来不及接收的
数据
只能暂存在缓存中。因此,一旦缓存满...
单片机/工控
27,508
社区成员
28,796
社区内容
发帖
与我相关
我的任务
单片机/工控
硬件/嵌入开发 单片机/工控
复制链接
扫一扫
分享
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章