lwip的内存管理
Posted yanhc
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了lwip的内存管理相关的知识,希望对你有一定的参考价值。
lwip可以不用malloc,而完全用pool,全用全局变量,没看明白怎么实现的。
#if LWIP_NETCONN || LWIP_SOCKET LWIP_MEMPOOL(NETBUF, MEMP_NUM_NETBUF, sizeof(struct netbuf), "NETBUF") LWIP_MEMPOOL(NETCONN, MEMP_NUM_NETCONN, sizeof(struct netconn), "NETCONN") #endif /* LWIP_NETCONN || LWIP_SOCKET */
1 #define LWIP_MEMPOOL(name,num,size,desc) LWIP_MEMPOOL_DECLARE(name,num,size,desc)
1 /** 2 * @ingroup mempool 3 * Declare a private memory pool 4 * Private mempools example: 5 * .h: only when pool is used in multiple .c files: LWIP_MEMPOOL_PROTOTYPE(my_private_pool); 6 * .c: 7 * - in global variables section: LWIP_MEMPOOL_DECLARE(my_private_pool, 10, sizeof(foo), "Some description") 8 * - call ONCE before using pool (e.g. in some init() function): LWIP_MEMPOOL_INIT(my_private_pool); 9 * - allocate: void* my_new_mem = LWIP_MEMPOOL_ALLOC(my_private_pool); 10 * - free: LWIP_MEMPOOL_FREE(my_private_pool, my_new_mem); 11 * 12 * To relocate a pool, declare it as extern in cc.h. Example for GCC: 13 * extern u8_t __attribute__((section(".onchip_mem"))) memp_memory_my_private_pool[]; 14 */ 15 #define LWIP_MEMPOOL_DECLARE(name,num,size,desc) 16 LWIP_DECLARE_MEMORY_ALIGNED(memp_memory_ ## name ## _base, ((num) * (MEMP_SIZE + MEMP_ALIGN_SIZE(size)))); 17 18 LWIP_MEMPOOL_DECLARE_STATS_INSTANCE(memp_stats_ ## name) 19 20 static struct memp *memp_tab_ ## name; 21 22 const struct memp_desc memp_ ## name = { 23 DECLARE_LWIP_MEMPOOL_DESC(desc) 24 LWIP_MEMPOOL_DECLARE_STATS_REFERENCE(memp_stats_ ## name) 25 LWIP_MEM_ALIGN_SIZE(size), 26 (num), 27 memp_memory_ ## name ## _base, 28 &memp_tab_ ## name 29 }; 30 31 #endif /* MEMP_MEM_MALLOC */
1 #ifndef LWIP_DECLARE_MEMORY_ALIGNED
2 #define LWIP_DECLARE_MEMORY_ALIGNED(variable_name, size) u8_t variable_name[LWIP_MEM_ALIGN_BUFFER(size)]
3 #endif
以上是关于lwip的内存管理的主要内容,如果未能解决你的问题,请参考以下文章