在XR872上开发时, 使用websocket, 为了增加接收和发送缓冲区的大小,从而支持全双工通信.目前使用 LWIP 2.1.2 版本,可以参考调整 lwipopts.h
文件中的一些选项来实现.
关键选项
- TCP_WND:定义 TCP 窗口大小,即接收缓冲区的大小。
- TCP_SND_BUF:定义 TCP 发送缓冲区的大小。
- PBUF_POOL_SIZE 和 PBUF_POOL_BUFSIZE:定义 PBUF 内存池的大小和单个 PBUF 的大小。
- MEM_SIZE:定义堆内存的总大小。
- MEMP_NUM_TCP_SEG:定义可用的 TCP 段数量。
示例配置
以下是一个示例配置,可以在 lwipopts.h
中设置这些参数以支持全双工通信并增加接收和发送缓冲区的大小。
#ifndef LWIPOPTS_H
#define LWIPOPTS_H
/* -------------------- Memory options -------------------- */
#define MEM_SIZE (16 * 1024) // Increase heap memory size
/* -------------------- PBUF options -------------------- */
#define PBUF_POOL_SIZE 64 // Increase number of pbufs
#define PBUF_POOL_BUFSIZE 512 // Increase pbuf size
/* -------------------- TCP options -------------------- */
#define TCP_WND (8 * 1024) // Increase TCP window size (receive buffer)
#define TCP_SND_BUF (8 * 1024) // Increase TCP send buffer size
#define TCP_MSS 1460 // Maximum segment size
#define TCP_SND_QUEUELEN (4 * TCP_SND_BUF/TCP_MSS) // Number of segments in the send queue
#define TCP_SNDLOWAT (TCP_SND_BUF/2) // Minimum number of bytes that must be queued in the TCP output buffer
#define TCP_SNDQUEUELOWAT ((TCP_SNDQUEUELEN)/2) // Minimum number of pbufs that must be queued in the TCP output buffer
/* -------------------- MEMP options -------------------- */
#define MEMP_NUM_TCP_SEG 32 // Increase number of TCP segments
/* -------------------- Socket options -------------------- */
#define LWIP_SOCKET 1
#define LWIP_NETCONN 1
/* -------------------- Checksum options -------------------- */
#define LWIP_CHECKSUM_CTRL_PER_NETIF 1
#endif /* LWIPOPTS_H */
解释
- MEM_SIZE:增加堆内存的总大小。这里将其设置为 16 KB。
- PBUF_POOL_SIZE:增加 PBUF 内存池的大小。这里将其设置为 64。
- PBUF_POOL_BUFSIZE:增加单个 PBUF 的大小。这里将其设置为 512 字节。
- TCP_WND:增加 TCP 窗口大小(接收缓冲区)。这里将其设置为 8 KB。
- TCP_SND_BUF:增加 TCP 发送缓冲区的大小。这里将其设置为 8 KB。
- TCP_MSS:最大段大小,通常为 1460 字节(适用于以太网 MTU)。
- TCP_SND_QUEUELEN:发送队列的段数,通常为发送缓冲区大小与 MSS 的比值的 4 倍。
- TCP_SNDLOWAT 和 TCP_SNDQUEUELOWAT:控制发送缓冲区和队列的低水位标记。
- MEMP_NUM_TCP_SEG:增加 TCP 段的数量,这对于支持更多的并发连接和更高的吞吐量很重要。
调整和优化
上述配置只是一个示例,根据实际应用和硬件资源,可以进一步调整这些值。例如,如果你的系统有更多的内存,可以增加 MEM_SIZE
以支持更多的缓冲区。相反,如果内存有限,可以减少 PBUF_POOL_SIZE
和 TCP_WND
等参数的值。
此外,在实际应用中,建议逐步调整这些参数并进行测试,以找到最佳的配置,确保系统在全双工通信下具有良好的性能和稳定性。