首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

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

2012-03-25 
两个串口同时使用的情况下,怎样才能保证不会丢失数据?串口1在做周期性的发送与接收,串口2接收数据的时间是

两个串口同时使用的情况下,怎样才能保证不会丢失数据?
串口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的接收有时有丢失数据的情况。

热点排行