两个串口同时使用的情况下,怎样才能保证不会丢失数据?

rszqy 2011-11-21 03:49:22
串口1在做周期性的发送与接收,串口2接收数据的时间是随机的。怎样才能保证两个串口都能正常使用,
不会出现出错和丢失数据的情况?
...全文
1078 11 打赏 收藏 转发到动态 举报
写回复
用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长度,数据是不会丢失的。

27,508

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧