企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
在LwIP协议栈初始化的时候, memp_init()会对内存池进行初始化,真正的内存初始化函数是memp_init_pool()函数,该函数源码具体见代码清单 5 6。 ``` 1 void 2 memp_init(void) 3 { 4 u16_t i; 5 6 /* for every pool: */ 7 for (i = 0; i < LWIP_ARRAYSIZE(memp_pools); i++) 8 { 9 memp_init_pool(memp_pools[i]); 10 } 11 } 12 13 void 14 memp_init_pool(const struct memp_desc *desc) 15 { 16 int i; 17 struct memp *memp; 18 19 *desc->tab = NULL; 20 memp = (struct memp *)LWIP_MEM_ALIGN(desc->base); 21 22 memset(memp, 0, (size_t)desc->num * (MEMP_SIZE + desc->size)); 23 24 /* 将内存块链接成链表形式 */ 25 for (i = 0; i < desc->num; ++i) 26 { 27 memp->next = *desc->tab; 28 *desc->tab = memp; 29 30 /* 地址偏移*/ 31 memp = (struct memp *)(void *)((u8_t *)memp + MEMP_SIZE + desc->size); 32 } 33 } ``` 该函数是比较简单的函数,就是根据每种POOL的memp_desc描述进行初始化,在每种类型的POOL中将空闲内存块连接成单链表,并且使用memset()函数将其内容清零,这样子就初始化完成了。 初始化完成的示意图(只有部分POOL)具体见图 5 3 ![](https://box.kancloud.cn/35397bf463fdfe2ab1581e4f6684c0a7_938x679.png)