lwip TCP传输速率振荡问题解决

这些天使用VDSP集成的在VDK上移植的lwip协议栈传输视频数据,使用交叉线在DSP BF537与PC机之间用TCP传数据,速率变化很大,在50kbps ~ 8Mbps之间快速变化,速率不断的振荡,而且网络中如果有其它的速据则我们的传输速率迅速下降,一般低于1Mbps。 我原来以为是协议栈的参数设置得不够好,于是不断地更改 lwipopts.h,测试得结果都差不多,当把lwip的缓冲区调到最大时也没有什么改善,速率还是和以前一样,不断的振荡,测试花了不少的时间,让我 很郁闷。据我所知,lwip虽然是一个开源的协议栈,但已经得到广泛的应用了,应该不是协议栈本身的原因,我开始怀疑是协议栈移植的原因了,于是开始看 lwip移植以及部分源代码,看了焦大侠的lwip在ucos的移植笔记,这个笔记非常的详细,焦大侠还提供了源代码,是一个难得的学习资料,真应该向焦 大侠说声谢谢!根据焦大侠的笔记,我把移植部分的源代码看了一遍,发现没有什么不对的地方,我只得怀疑协议栈的原因了。以前看了unix网络编程,知道 socket编程还是有很多的选项可以更改了,这些选项也会影响到协议栈的性能,其中发送和接收缓冲区的大小可以在VDSP IDDE上设置,其余的影响性能的选项主要是一个叫做Nagle的算法。我开始看lwip源码socket.c,这里面就包含了设置选项的函数, setsocketopt(),看看支持了哪些选项,在IPPROTO_TCP选项里就有TCP_NODELAY选项,这个可以关闭Nagle算法,这个 算法我不是很清楚,所以我就登陆 http://lists.gnu.org/archive/html/lwip-users/,搜索TCP_NODELAY,其中就有我遇到的类似的问题,我非常的兴奋,问题应该就是这里了。我在程序中添加socket的选项TCP_NODELAY
int optval = 1;
setsocketopt(socket_fd, IPPROTO_TCP, TCP_NODELAY, &optval, sizeof(optval) );
重新编译程序,果然发送数据稳定在8Mbps,呵呵,终于搞定了。。。。。。。
    另外在运行程序时死机,打印消息 Assertion " sys_mbox_post: mbox not full " in \arch-VDK\sys_arch.c,在前一段时间看lwip在VDK移植的时候看了sys_arch.c文件,找到产生这个Assertion的 语句,原来是向一个已经满了的邮箱发送邮件,这当然是个错误,邮箱的大小是通过SYS_MBOX_SIZE来定义的,我将这个值改成1024,重编译, OK,问题解决了,呵呵
总之,项目开发的过程中会遇到各种想不到了问题,一般还是可以解决的,关键是时间和耐心。。。。。。
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值