关于LWIP协议栈内存管理,以下是本人的粗劣理解,本人能力有限,如有错误之处,虚心接受大家的批评指正;
调试环境:硬件平台stm32f429;lwip版本号:lwip-1.4.1;开发环境:keil5;
下图为图一为本人调试LWIP协议栈过程中抽象出来的简图,此图并非lwip通用结构示意图,仅供参考,下文将对此图进行详细说明;
图一:
一,协议栈内存的初始化:
在系统初始化函数lwip_init(); 中调用了 mem_init(); memp_init();这两个系统函数,完成LWIP主要的内存结构初始化的过程;首先我们来看一下这两个函数的源码:
mem_init(void)
{
struct mem *mem; //创建了一个指向mem结构体类型的指针;
LWIP_ASSERT("Sanity check alignment",
(SIZEOF_STRUCT_MEM & (MEM_ALIGNMENT-1)) == 0);
/* align the heap */
ram = (u8_t *)LWIP_MEM_ALIGN(LWIP_RAM_HEAP_POINTER); //获取内存指针,并将其按指定方式对齐,对齐模式在宏定义中#define MEM_ALIGNMENT 4配置
//#define LWIP_RAM_HEAP_POINTER ram_heap中宏定义,ram_heap指针在调用此函数之前动态申请
/* initialize the start of the heap */
mem = (struct mem *)(voi