嵌入式--内存分配管理

嵌入式---内存分配管理

嵌入式的内存一般都非常的小,最进在学习LWIP协议栈的移植,在正点原子的学习资料中找到了许多关于怎么移植协议栈的东西,其中使用到了内存的分配管理技术,能够高效的管理和使用内存,学习之后整理了放在这里。

一、内存分配管理函数

函数名

函数说说明

输入、输出

memory_int( )

内存分配初始化

无、无

memory_perused(u8 memx)

内存使用率

menx-->内存源

* memory_malloc(u8 memx,u32 size)

内存分配函数

返回内存块指针

void memory_free(u8 memx,void xptr)

内存释放函数

Xptr-->释放的内存头指针

二、内存分配示意图

嵌入式---内存分配管理
 

三、函数编写

内存管理器

Struct _m_mallco_dev

{

 void (*mem_init)(void);

 u8 (*mem_perused)(void);

 U8 *membase[SRAMBANK];

 u16 *memmap[SRAMBANK];

 u8 memrdy[SRAMBANK];

}

1、init,函数指针,指向内存初始化函数。

2、Peruserd,函数指针,指向内存使用率函数。

3、membase,内存池指针,SRAMBANK配置的池子个数。

4、menmap,内存管理表指针,指向内存管理表。多少个池子,就有多少个内存管理表。

5、memrdy,内存管理就绪标志。

6、SRAMBANK内存块片数。

内存管理宏定义

#define SRAMIN      0               //内部内存池

#define SRMBANK    1                //定义支持的SRAM块数

#define MEM_BLOCK_SIZE     32       //内存块大小

#define MEM_MAX_SIZE   42*1024      //内存池大小

#define MEM_ALLOC_TABLE_SIZE  MEM_MAX_SIZE/MEM_BLOCK_SIZE //内存表大小。

内存管理数组参数

_align(4) u8 membase[MEM_MAX_SIZE];   //内存池(4字节对齐),利用数组开辟空间

u16 memmap[MEM_ALLOC_TABLE_SIZRE]; //内存池map

Const u32 memtblsize= MEM_ALLOC_TABLE_SIZE;   //内存表大小

Const u32 memblksize= MEM_BLOCK_SIZE;         //内存分块大小

Const u32 memsize= MEM_MAX_SIZE;             //内存总大小

内存管理控制器的初始化

struct _m_mallco_dev mallco_dev =

{

 mem_init;      //内存初始化

 mem_perused;   //内存使用率

 membase;     //内存池

 memmap;      //内存管理状态表

 0 ;            //内存管理未就绪

}

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值