博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LWIP学习笔记8——提高 LwIP 网络传输的速度
阅读量:4092 次
发布时间:2019-05-25

本文共 1325 字,大约阅读时间需要 4 分钟。

提高 LwIP 网络传输的速度

以太网发送和接收的缓冲区大小,默认是 4,可以稍微改大一点,

1 #define ETH_RXBUFNB ((uint32_t)8U) /* 接收缓冲区 */2 #define ETH_TXBUFNB ((uint32_t)8U) /* 发送缓冲区 */

对 LwIP 管理的内存肯定要分配的大一些, 而对于发送数据是存储在 ROM 或者静态存储区的时候,还要将 MEMP_NUM_PBUF 宏定义改的大一点, 当然发送缓冲区大小和发送缓冲区队列长度决定了发送速度的大小,根据不同需求进行配置,并且需要不断调试,而对于接收数据的配置,应该配置 TCP 缓冲队列中的报文段数量与 TCP 接收窗口大小,特别是接收窗口的大小,这直接可以影响数据的接收速度。

//内存堆 heap 大小2 #define MEM_SIZE (25*1024)34 /* memp 结构的 pbuf 数量,如果应用从 ROM 或者静态存储区发送大量数据时5 这个值应该设置大一点 */6 #define MEMP_NUM_PBUF 2578 /* 最多同时在 TCP 缓冲队列中的报文段数量 */9 #define MEMP_NUM_TCP_SEG 1501011 /* 内存池大小 */12 #define PBUF_POOL_SIZE 651314 /* 每个 pbuf 内存池大小 */15 #define PBUF_POOL_BUFSIZE \16LWIP_MEM_ALIGN_SIZE(TCP_MSS+40+PBUF_LINK_ENCAPSULATION_HLEN+PBUF_LINK_HLEN)171819 /* 最大 TCP 报文段, TCP_MSS = (MTU - IP 报头大小 - TCP 报头大小 */20 #define TCP_MSS (1500 - 40)2122 /* TCP 发送缓冲区大小(字节) */23 #define TCP_SND_BUF (11*TCP_MSS)2425 /* TCP 发送缓冲区队列的最大长度 */26 #define TCP_SND_QUEUELEN (8* TCP_SND_BUF/TCP_MSS)2728 /* TCP 接收窗口大小 */29 #define TCP_WND (11*TCP_MSS)

当然,除此之外,想要整个 LwIP 能高速平稳运行,只配置这些是不够的,比如我们应该使用中断的方式接收数据,这就省去了 CPU 查询数据,而且,我们应该将内核邮箱的容量增大,这样子在接收到数据之后,投递给内核就不会因为无法投递而阻塞,同时内核线程的优先级应该设置得更高一点,这样子就能及时去处理这些数据,当然,我们也可以独立使用一个新的发送线程,这样子内核就无需调用底层网卡函数,它可以专心处理数据,发送数据的事情就交由发送线程去处理,同时,在处理数据的时候,不用使用串口打印信息,因为串口是一个很慢的外设,当然啦, 关于提高 LwIP 网络传输的速度,还有很多东西要优化的,这也跟使用环境有关系,不能一概而论,只是给出一些方向,具体怎么实现,还需要大家亲身实践去调试。

转载地址:http://wcnii.baihongyu.com/

你可能感兴趣的文章
express的应用
查看>>
NodeJS开发指南——mongoDB、Session
查看>>
Express: Can’t set headers after they are sent.
查看>>
2017年,这一次我们不聊技术
查看>>
实现接口创建线程
查看>>
Java对象序列化与反序列化(1)
查看>>
HTML5的表单验证实例
查看>>
JavaScript入门笔记:全选功能的实现
查看>>
程序设计方法概述:从面相对象到面向功能到面向对象
查看>>
数据库事务
查看>>
JavaScript基础1:JavaScript 错误 - Throw、Try 和 Catch
查看>>
SQL基础总结——20150730
查看>>
SQL join
查看>>
JavaScript实现页面无刷新让时间走动
查看>>
CSS实例:Tab选项卡效果
查看>>
前端设计之特效表单
查看>>
前端设计之CSS布局:上中下三栏自适应高度CSS布局
查看>>
Java的时间操作玩法实例若干
查看>>
JavaScript:时间日期格式验证大全
查看>>
pinyin4j:拼音与汉字的转换实例
查看>>