当前位置: 技术问答>linux和unix
请教大家evdo mc703丢包问题
来源: 互联网 发布时间:2016-11-27
本文导语: 1、在用arm9+linux平台在,用usb1.1接mc703模块,发现当速度提到33KB/s的时候,发现数据有丢失。用HD-USB12分析仪观察,发现在发某个包的时候,收到NAK,导致一直重传直到成功(大约有2000次),接下去成功发3、4包之后,...
1、在用arm9+linux平台在,用usb1.1接mc703模块,发现当速度提到33KB/s的时候,发现数据有丢失。用HD-USB12分析仪观察,发现在发某个包的时候,收到NAK,导致一直重传直到成功(大约有2000次),接下去成功发3、4包之后,数据丢失个10几包,之后正常。在usb-serial.ko中打印,发现丢失的数据根本没有传到驱动层。丢失应该是发生在应用层。
2、把mc703接pc上,也会出现NAK,但只有重传3、4次,就成功了。
怀疑是由于在重传的时候,应用层sendto函数(30ms调用一次发1024字节)一直往ppp的缓冲区写数据,此时usb又发不出去,导致缓冲区满,接下来的包丢失,没有传递到驱动层。
搞了很久了,希望大家多多帮忙!谢谢了。
2、把mc703接pc上,也会出现NAK,但只有重传3、4次,就成功了。
怀疑是由于在重传的时候,应用层sendto函数(30ms调用一次发1024字节)一直往ppp的缓冲区写数据,此时usb又发不出去,导致缓冲区满,接下来的包丢失,没有传递到驱动层。
搞了很久了,希望大家多多帮忙!谢谢了。
|
你用的是UDP进行通讯的吧。在UDP通讯中,UDP发送方比接收方运行速度快是造成数据丢失的一个重要原因。
实际上UDP套接口没有发送缓冲区。因此在一个阻塞UDP套接口上的输出操作不会阻塞。
另外:你的缓冲区是开在哪里?驱动程序?
实际上UDP套接口没有发送缓冲区。因此在一个阻塞UDP套接口上的输出操作不会阻塞。
另外:你的缓冲区是开在哪里?驱动程序?