lwip編譯選項


修改默認選項時,不要修改opt.h文件,通過lwipopts.h修改。

和內存管理以及TCP發送性能相關的選項

// 為1時使用系統庫malloc/free進行內存管理
#ifndef MEM_LIBC_MALLOC
#define MEM_LIBC_MALLOC 0
#endif
// 使用mem_malloc/mem_free替代pool內存池管理
// lwip支持使用內存池來管理一些需要經常分配/釋放的數據結構
// 例如pcb
// 將下面選項置1禁用該特性
// 一般和MEM_LIBC_MALLOC選項一道使用
// 使得所有內存分配都通過系統庫進行
#ifndef MEMP_MEM_MALLOC
#define MEMP_MEM_MALLOC 0
#endif
// 使用內存池而不是malloc來分配一般性內存
// 此選項需要和MEMP_USE_CUSTOM_POOLS一起使用
#ifndef MEM_USE_POOLS
#define MEM_USE_POOLS 0
#endif
// 用於PBUF_ROM和PBUF_REF的pbuf結構數量
// 如果程序主要使用零拷貝方式發送大量數據
// 需要較大數量的該結構
#ifndef MEMP_NUM_PBUF
#define MEMP_NUM_PBUF 16
#endif
// PBUF內存池(PBUF_POOL類型的PBUF)中的PBUF數量
#ifndef PBUF_POOL_SIZE
#define PBUF_POOL_SIZE 16
#endif
// TCP發送緩沖區大小(已發出但還未收到ACK的最大允許數據量)
// 只是設定大小,並不實際分配內存
// 如果你的程序需要發送大量零拷貝數據
// 可以將這個值設大一些
// (因為零拷貝數據“總是在那里”,不占LwIP動態內存)
// 最小不應小於單次調用tcp_write時可能發送的最大數據量

// 調用tcp_write時的參數len若大於tpcb->snd_buf將導致返回ERR_MEM
// (在LwIP代碼中,每成功執行一次tcp_write相應減小tpcb->snd_buf,
// 每收到一次ACK相應增加tpcb->snd_buf)
// 考慮到一般系統“隔一個確認”的原則,
// 一般設置為TCP_MSS的2倍或更大的值。
#ifndef TCP_SND_BUF #define TCP_SND_BUF (2 * TCP_MSS) #endif
// MEM_SIZE是一般意義上的動態內存大小
// 如果程序需要進行較大量的拷貝數據發送
// 則需要較大數量的該內存
// 因為所有的拷貝發送數據都需要復制到
// 這種“一般意義”的動態內存中
// PBUF_RAM類型的PBUF即從中分配
#ifndef MEM_SIZE #define MEM_SIZE 1600 #endif
// PBUF內存池中的每個PBUF大小
// 默認值是能放下一個完整的TCP包(包括下層協議頭)
// 如果你能確定很少接收全長TCP包,可以使用小一點的值
#ifndef PBUF_POOL_BUFSIZE #define PBUF_POOL_BUFSIZE LWIP_MEM_ALIGN_SIZE(TCP_MSS+40+PBUF_LINK_HLEN+4/*VLAN_TAG*/+4/*CRC*/) #endif 
// 在單個pcb中排隊的待發pbuf數量上限
// 不應小於 (2 * TCP_SND_BUF/TCP_MSS)
// 考慮以下幾點:
// 1. 對於REF/ROM類型的數據,協議頭和協議數據是分開存放的,因此每段數據需要兩個PBUF
// 2. LwIP可能會將多次tcp_write中的待發數據合並到一起
// (如果每次tcp_write數據量都較小)
// 3. 需要Copy發送的數據,協議頭和數據在單一PBUF里面
// 一般用默認值即可
#ifndef TCP_SND_QUEUELEN #define TCP_SND_QUEUELEN ((4 * (TCP_SND_BUF) + (TCP_MSS - 1))/(TCP_MSS)) #endif
// App層發送的超過MSS大小的數據量會被拆分為SEG
// 每個SEG內數據量不超過MSS
// 每個SEG可能擁有多個pbuf
// 不小於TCP_SND_QUEUELEN #ifndef MEMP_NUM_TCP_SEG #define MEMP_NUM_TCP_SEG 16 #endif

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM