lwip 内存池与内存堆的空间定义

lwip v1.41版本:

1、内存池空间的定义

#if MEMP_SEPARATE_POOLS  //分别定义不同类型的内存池

/** This creates each memory pool. These are named memp_memory_XXX_base (where
 * XXX is the name of the pool defined in memp_std.h).
 * To relocate a pool, declare it as extern in cc.h. Example for GCC:
 *   extern u8_t __attribute__((section(".onchip_mem"))) memp_memory_UDP_PCB_base[];
 */
#define LWIP_MEMPOOL(name,num,size,desc) u8_t memp_memory_ ## name ## _base \
  [((num) * (MEMP_SIZE + MEMP_ALIGN_SIZE(size)))];   //定义每一种数组:内存池的数量乘以对应内存池的大小,num的大小通过"lwipopts.h"中的 MEMP_NUM_UDP_PCB MEMP_NUM_TCP_PCB

来定义
#include "lwip/memp_std.h"    //分别定义不同类型的内存池 LWIP_MEMPOOL(RAW_PCB, 

//LWIP_MEMPOOL(UDP_PCB, LWIP_MEMPOOL(TCP_PCB, 等等

/** This array holds the base of each memory pool. */
static u8_t *const memp_bases[] = { 
#define LWIP_MEMPOOL(name,num,size,desc) memp_memory_ ## name ## _base,  //指向已定义的各个内存池数组的首地址memp_memory_ ## name ## _base

#include "lwip/memp_std.h"
};

#else /* MEMP_SEPARATE_POOLS */  //定义不同类型的内存池在一起

/** This is the actual memory used by the pools (all pools in one big block). */
//static u8_t memp_memory[MEM_ALIGNMENT - 1 
//#define LWIP_MEMPOOL(name,num,size,desc) + ( (num) * (MEMP_SIZE + MEMP_ALIGN_SIZE(size) ) )
//#include "lwip/memp_std.h"
//];
u8_t *memp_memory;   //指向外面分配的整片内存


#endif /* MEMP_SEPARATE_POOLS */


define LWIP_MEMPOOL(name,num,size,desc) u8_t memp_memory_ ## name ## _base \
  [((num) * (MEMP_SIZE + MEMP_ALIGN_SIZE(size)))]; 
#include "lwip/memp_std.h" 

2、内存堆空间的定义

#define MIN_SIZE_ALIGNED     LWIP_MEM_ALIGN_SIZE(MIN_SIZE)
#define SIZEOF_STRUCT_MEM    LWIP_MEM_ALIGN_SIZE(sizeof(struct mem))
#define MEM_SIZE_ALIGNED     LWIP_MEM_ALIGN_SIZE(MEM_SIZE)  //内存堆MEM_SIZE实际大小通过"lwipopts.h"中的 #define MEM_SIZE         (25*1024)来定义

/** If you want to relocate the heap to external memory, simply define
 * LWIP_RAM_HEAP_POINTER as a void-pointer to that location.
 * If so, make sure the memory at that location is big enough (see below on
 * how that space is calculated). */
#ifndef LWIP_RAM_HEAP_POINTER
/** the heap. we need one struct mem at the end and some room for alignment */
//u8_t ram_heap[MEM_SIZE_ALIGNED + (2*SIZEOF_STRUCT_MEM) + MEM_ALIGNMENT];   //通过内部定义内存堆空间数组
u8_t *ram_heap;    //通过外部分配内存堆空间
#define LWIP_RAM_HEAP_POINTER ram_heap

lwip v2.12版本:

1、内存池空间的定义

#ifndef LWIP_DECLARE_MEMORY_ALIGNED
#define LWIP_DECLARE_MEMORY_ALIGNED(variable_name, size)    u8_t variable_name[LWIP_MEM_ALIGN_BUFFER(size)]      //定义数组variable_name,大小为size
#endif

#define LWIP_MEMPOOL(name,num,size,desc) LWIP_MEMPOOL_DECLARE(name,num,size,desc)    
#include "lwip/priv/memp_std.h"   
//分别定义不同类型的内存池 LWIP_MEMPOOL(RAW_PCB, 

//LWIP_MEMPOOL(UDP_PCB, LWIP_MEMPOOL(TCP_PCB, 等等

#define LWIP_MEMPOOL_DECLARE(name,num,size,desc) \
  LWIP_DECLARE_MEMORY_ALIGNED(memp_memory_ ## name ## _base, ((num) * (MEMP_SIZE + MEMP_ALIGN_SIZE(size)))); \   
//实际最后通过LWIP_DECLARE_MEMORY_ALIGNED 来定义MEMP_SIZE + MEMP_ALIGN_SIZE(size)大小的variable_name[LWIP_MEM_ALIGN_BUFFER(size)]  数组  
    \
  LWIP_MEMPOOL_DECLARE_STATS_INSTANCE(memp_stats_ ## name) \
    \
  static struct memp *memp_tab_ ## name; \
    \
  const struct memp_desc memp_ ## name = { \
    DECLARE_LWIP_MEMPOOL_DESC(desc) \
    LWIP_MEMPOOL_DECLARE_STATS_REFERENCE(memp_stats_ ## name) \
    LWIP_MEM_ALIGN_SIZE(size), \
    (num), \
    memp_memory_ ## name ## _base, \
    &memp_tab_ ## name \
  };

2、内存堆空间的定义

#ifndef LWIP_DECLARE_MEMORY_ALIGNED
#define LWIP_DECLARE_MEMORY_ALIGNED(variable_name, size)        u8_t variable_name[LWIP_MEM_ALIGN_BUFFER(size)]    //定义数组variable_name,大小为size
#endif

men.c文件:

/* some alignment macros: we define them here for better source code layout */
#define MIN_SIZE_ALIGNED     LWIP_MEM_ALIGN_SIZE(MIN_SIZE)
#define SIZEOF_STRUCT_MEM    LWIP_MEM_ALIGN_SIZE(sizeof(struct mem))
#define MEM_SIZE_ALIGNED
    LWIP_MEM_ALIGN_SIZE(MEM_SIZE)   //内存堆MEM_SIZE实际大小通过"lwipopts.h"中的 #define MEM_SIZE         (25*1024)来定义

/** If you want to relocate the heap to external memory, simply define
 * LWIP_RAM_HEAP_POINTER as a void-pointer to that location.
 * If so, make sure the memory at that location is big enough (see below on
 * how that space is calculated). */

#ifndef LWIP_RAM_HEAP_POINTER
/** the heap. we need one struct mem at the end and some room for alignment */
LWIP_DECLARE_MEMORY_ALIGNED(ram_heap, MEM_SIZE_ALIGNED + (2U * SIZEOF_STRUCT_MEM)); 
//实际定义ram_heap[MEM_SIZE_ALIGNED + (2U * SIZEOF_STRUCT_MEM] 一组数组来做内存堆
#define LWIP_RAM_HEAP_POINTER ram_heap   //LWIP_RAM_HEAP_POINTER指向ram_heap
#endif /* LWIP_RAM_HEAP_POINTER */

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值