当前位置: 代码迷 >> 单片机 >> 两个串口同时使用的情况下,怎样才能保证不会丢失数据?该如何处理
  详细解决方案

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

热度:330   发布时间:2016-04-28 16:32:15.0
两个串口同时使用的情况下,怎样才能保证不会丢失数据?
串口1在做周期性的发送与接收,串口2接收数据的时间是随机的。怎样才能保证两个串口都能正常使用,
不会出现出错和丢失数据的情况?

------解决方案--------------------
(1) 每个串口的接受和发送都设置一个独立缓冲区FIFO,长度根据具体的应用来定。
(2) 周期性的发送和接受,你发送和接受一帧数据之后,预留一定的时间给主程序去准备和处理数据,应该就不会出现数据的丢失。
(3) 对于串口2的随机性的收发,中断接受发送函数尽量短,接受时,可以先放入对应的缓冲区,接受完毕,设置对应标志,到主程序中判断。如果此时又有数据过来,中断中将其放入下一个FIFO中。理论上设置合适的FIFO长度,数据是不会丢失的。
------解决方案--------------------
两个串口,各有个的buffer(硬件),如果硬件提供双层 buffer,中断程序比较合理(只接收转存数据),应该没有问题,
当然,再能从协议上保证那最好
------解决方案--------------------
1楼都说了,支持。

原则就是中断服务尽量短。

用FIFO管理是非常有效的手段。
------解决方案--------------------
探讨

(1) 每个串口的接受和发送都设置一个独立缓冲区FIFO,长度根据具体的应用来定。
(2) 周期性的发送和接受,你发送和接受一帧数据之后,预留一定的时间给主程序去准备和处理数据,应该就不会出现数据的丢失。
(3) 对于串口2的随机性的收发,中断接受发送函数尽量短,接受时,可以先放入对应的缓冲区,接受完毕,设置对应标志,到主程序中判断。如果此时又有数据过来,中断中将其放入下一个FIFO中。理论……

------解决方案--------------------
探讨
回复1楼:你说的独立缓冲区FIFO怎么实现呢?对于串口2,我现在是用一个char数组来存放数据,以‘\n’作为结束标志。然后设置一个接收完成标志,在主循环里判断该做什么反应。串口2的发送可以设置在串口1没有通信的时候发送,所以串口2的发送是没有问题的。
串口1也给主循环预留了足够长的时间。
现在的情况是串口1正常工作,而串口2的接收有时有丢失数据的情况。
  相关解决方案