内存管理:
LWIP的两种内存管理策略:内存池、内存堆;
内存堆可由内存池实现;
内存池可由内存堆实现;
内存池和内存堆可独立实现;
此外,支持C标准库的malloc和free;
pbuf:
pbuf结构体是描述协议栈中数据包的数据结构;
4种类型:
PBUF_RAM:内存堆分配;
PBUF_POOL:内存池分配;
PBUF_ROM:不包含数据区域,数据存储在ROM中;
PBUF_REF:不包含数据区域,数据存储在RAM中;
MEMP_PBUF为专门存放pbuf数据结构的内存池,主要适用于PBUF_ROM和PBUF_REF类型的pbuf;
MEMP_PBUF_POOL包含pbuf结构和数据区域,即PBUF_POOL类型的pbuf,以固定长度分配,对于较大的数据包,可能需要申请多个pbuf;
用户需自行设置PBUF_ROM和PBUF_REF的pbuf结构体中的payload指针;
对于一个数据包,可能使用多种不同的pbuf一起描述;
tot_len字段记录自身即其后面的pbuf总大小;
ref字段记录pbuf数据包被引用的次数;
内存池申请的pbuf使用memp_free释放;
内存堆申请的pbuf使用mem_free释放;
网卡发送数据:low_level_output();
网卡接收数据:low_level_input();
pbuf数据包递交上层:ethernetif_input();
lwipopts.h:用于配置LWIP的相关参数,如果没有在此配置,那么LWIP会使用opt.h默认的参数;