LWIP学习笔记8——提高 LwIP 网络传输的速度

提高 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)
3
4 /* memp 结构的 pbuf 数量,如果应用从 ROM 或者静态存储区发送大量数据时
5 这个值应该设置大一点 */
6 #define MEMP_NUM_PBUF 25
7
8 /* 最多同时在 TCP 缓冲队列中的报文段数量 */
9 #define MEMP_NUM_TCP_SEG 150
10
11 /* 内存池大小 */
12 #define PBUF_POOL_SIZE 65
13
14 /* 每个 pbuf 内存池大小 */
15 #define PBUF_POOL_BUFSIZE \
16
LWIP_MEM_ALIGN_SIZE(TCP_MSS+40+PBUF_LINK_ENCAPSULATION_HLEN+PBUF_LINK_HLEN)
17
18
19 /* 最大 TCP 报文段, TCP_MSS = (MTU - IP 报头大小 - TCP 报头大小 */
20 #define TCP_MSS (1500 - 40)
21
22 /* TCP 发送缓冲区大小(字节) */
23 #define TCP_SND_BUF (11*TCP_MSS)
24
25 /* TCP 发送缓冲区队列的最大长度 */
26 #define TCP_SND_QUEUELEN (8* TCP_SND_BUF/TCP_MSS)
27
28 /* TCP 接收窗口大小 */
29 #define TCP_WND (11*TCP_MSS)

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

发布了30 篇原创文章 · 获赞 33 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/sinat_31039061/article/details/104751278