lwip内存管理

编程入门 行业动态 更新时间:2024-10-17 21:23:15

lwip<a href=https://www.elefans.com/category/jswz/34/1766335.html style=内存管理"/>

lwip内存管理

一、内存堆:

1、内存堆小小结构体:

//mem.c

struct mem {
  mem_size_t next;
  mem_size_t prev;
  u8_t used;
};

2、内存堆操作函数:

//mem.c

void mem_init(void)

void mem_free(void *rmem)

void *mem_realloc(void *rmem,mem_size_t newsize)

void *mem_malloc(mem_size_t size)

void *mem_calloc(mem_size_t count,mem_size_t size)

二、内存池:

1、内存池小小结构体:

//memp.c

struct memp {
  struct memp *next;
#if MEMP_OVERFLOW_CHECK
  const char *file;
  int line;
#endif

};

2、POOL的类型:

(1)POOL有许多种,opt.h中配置,其类型大小固定,个数需要用户配置。

(2)POOL类型:1)MEMPOOL                      -----standard pools

                                 2)MALLOC_MEMPOOL     -----used by mem_malloc in mem.c

                                 3)PBUF_MEMPOOL          -----pbuf's,include pbuf struct.

(3)各类POOL:

        //memp_std.h

          1)一些标准类型:例如:#if LWIP_UDP

                                                        LWIP_MEMPOOL(UDP_PCB,        MEMP_NUM_UDP_PCB,         sizeof(struct udp_pcb),        "UDP_PCB")
                                                        #endif /* LWIP_UDP */

          2) #ifndef LWIP_MALLOC_MEMPOOL

                  #define LWIP_MALLOC_MEMPOOL(num,size) LWIP_MEMPOOL(POOL_##size,num,size,"MALLOC_"#size)

                  #endif

         3)   #ifndef LWIP_PBUF_MEMPOOL        /* This treats "pbuf pools" just like any other pool. Allocates buffers for a pbuf struct AND a payload size */
                  #define LWIP_PBUF_MEMPOOL(name, num, payload, desc) LWIP_MEMPOOL(name, num, (MEMP_ALIGN_SIZE(sizeof(struct pbuf)) + MEMP_ALIGN_SIZE(payload)), desc)
                  #endif 

            4)总之:LWIP_MEMPOOL(XXX, MEMP_NUM_XXX, sizeof(struct XXX), "XXX")  包括:pool名称,此pool类型的个数,结构体大小,说明。

3、协议栈与缓冲池管理相关全局变量(5个):

//memp.c

       memp_num:此静态数组用于保存各类缓冲池的成员数目。

       memp_sizes:此静态数组用于保存各类缓冲池的结构大小。

       memp_tab: 此指针数组指向各类缓冲池当前空闲节点。

       memp_desc:  描述。

       memp_memory: 用于确定缓冲池所使用的内存缓冲区。

4、实现函数:

   //memp.c

memp_init();

memp_malloc();

memp_free();

memp_sanity();

memp_overflow_cheek_element();

memp_overflow_check_all();

memp_overflow_init();

5、联系:

//memp.h

/* Create the list of all memory pools managed by memp. MEMP_MAX represents a NULL pool at the end */
typedef enum {
     #define LWIP_MEMPOOL(name,num,size,desc)  MEMP_##name,
     #include "lwip/memp_std.h"
     MEMP_MAX
} memp_t;

转换为:

typedef enum {
      MEMP_RAM_PCB,MEMP_PBUF_POOL,MEMP_UDP_PCB,MEMP_TCP_PCB,.......
      MEMP_MAX       //POOL的种类个数
} memp_t;

 

更多推荐

lwip内存管理

本文发布于:2024-03-12 11:49:24,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1731446.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:内存管理   lwip

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!