串口接收时丢数据问题解决方案
2011-04-09 20:48
489 查看
老规矩,先说下问题:串口在接收pc端发来的数据时(100个bytes,每200ms发送一次),偶尔会丢一些数据。某一次的测试记录如下:
第一次丢数据 发送总量60多万字节 丢了27个
第二次丢数据 发送总量80多万字节 (在上一次发送的基础上又)丢了40个
第三次丢数据 发送总量190多万字节 (在上一次发送的基础上又)丢了37个
以上数据要说明的是所丢的数据是一个随机情况,因为如果我把环境清空(例如断电重启)而pc端的发送条件不变,那么丢数据的情况就不是上面显示的记录了。
分析,所谓的丢数据无非就是fifo溢出软件来不及读取或者是软件缓冲区的可读区大小为0。不过从上述情况来看应该不是后者的原因。因为,如果是后者,当pc发送条件不变而开发板环境清空重来的话,丢数据的情况应该一样。
针对以上情况,可通过以下几个方案来修改
方案一:如果pc(发送端)有自动流控,那么ce端也应该打开自动流控--在串口驱动中通过rUMCON寄存器设置;如果pc端没有,ce端也应该将自动流控关闭
方案二:提高接收线程的优先级,包括应用程序和驱动程序的
方案三:设置串口控制器的接收中断模式和FIFO的trigger level值。中断模式有两种,pulse模式的意思是当FIFO中的数据量刚到达所要求(trigger level)的时候会产生中断,该中断只在那一刻产生,如果那时cpu还在处理上一次的中断而把该中断mask掉,那么该中断就回被丢掉,而FIFO中的数据就会一直增加到溢出;level模式的意思是只要FIFO中的数据达到所要求的时候就会产生中断,包括比所要求的多的时候,只要cpu在FIFO中的数据在溢出之前处理完上一次的中断而来处理这次中断,这样FIFO就不会溢出,数据也就不会丢失。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/gooogleman/archive/2009/07/19/4359624.aspx
第一次丢数据 发送总量60多万字节 丢了27个
第二次丢数据 发送总量80多万字节 (在上一次发送的基础上又)丢了40个
第三次丢数据 发送总量190多万字节 (在上一次发送的基础上又)丢了37个
以上数据要说明的是所丢的数据是一个随机情况,因为如果我把环境清空(例如断电重启)而pc端的发送条件不变,那么丢数据的情况就不是上面显示的记录了。
分析,所谓的丢数据无非就是fifo溢出软件来不及读取或者是软件缓冲区的可读区大小为0。不过从上述情况来看应该不是后者的原因。因为,如果是后者,当pc发送条件不变而开发板环境清空重来的话,丢数据的情况应该一样。
针对以上情况,可通过以下几个方案来修改
方案一:如果pc(发送端)有自动流控,那么ce端也应该打开自动流控--在串口驱动中通过rUMCON寄存器设置;如果pc端没有,ce端也应该将自动流控关闭
方案二:提高接收线程的优先级,包括应用程序和驱动程序的
方案三:设置串口控制器的接收中断模式和FIFO的trigger level值。中断模式有两种,pulse模式的意思是当FIFO中的数据量刚到达所要求(trigger level)的时候会产生中断,该中断只在那一刻产生,如果那时cpu还在处理上一次的中断而把该中断mask掉,那么该中断就回被丢掉,而FIFO中的数据就会一直增加到溢出;level模式的意思是只要FIFO中的数据达到所要求的时候就会产生中断,包括比所要求的多的时候,只要cpu在FIFO中的数据在溢出之前处理完上一次的中断而来处理这次中断,这样FIFO就不会溢出,数据也就不会丢失。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/gooogleman/archive/2009/07/19/4359624.aspx
相关文章推荐
- 串口接收时丢数据问题解决方案
- 串口接收时丢数据问题解决方案
- 串口接收时丢数据问题解决方案
- 串口接收时丢数据问题解决方案
- vxworks RS422串口接收大数据格式包丢包问题
- 遇到的问题(一):智能家居中WIFI模块设备在接收底层家具设备串口数据时由于断帧而出现的指令丢失的情况处理
- Qt串口接收数据长度不稳定问题
- 串口读写,select 检测有数据时就接收,防止阻塞问题
- 串口通信中接收数据时延迟处理与缓存处理的解决方案(C#)
- STM32移植RT-Thread后的串口在调试助手上出现:(mq != RT_NULL) assert failed at rt_mq_recv:2085和不能接收数据问题讨论
- 安卓 关于接收串口数据的问题
- 关于串口数据接收相关问题
- labview串口发送与接收数据格式问题
- vc mscom控件串口接收不到数据问题
- 关于DELLR710/R910(rhel5.3-5.5) Broadcom netxtreme 5709网卡间歇性的停止接收数据包的问题解决方案
- STM32 ucosii 串口接收数据 遇到的问题及解决思路
- Linux串口通信中一种接收不到数据的问题的解决
- 串口接收数据及时返回问题(电能表测试的上位机应用程序)
- MFC串口发送数据大于128数据出错的解决办法(发送0xFE接收得到0x3F等问题)
- read函数读串口数据“分包”问题及解决方案