放假里晚上就睡得晚,没有睡得兄弟晚上好:
下面我给大家分享一下我掌机的动态内存管理。说起动态内存管理,我研究了有半年多,一年前写出了一个我认为还完美的动态内存管理,现在分享给大家。
动态内存有以下优点:
1,它的操作和我们在电脑上一样操作,函数名一模一样;
2,他可以移植到任何处理器芯片和单片机;
3,支持内存碎片自动管理功能;
4,在任意地方可以了申请和释放,不用考虑释放和申请顺序(因为它有内存碎片自动管理功能);
这款评估板,代码是一年前写的,由于写好没有详细整理过。所以有点乱,希望大家谅解。
有兴趣的兄弟可以移植玩玩。
配置讲解:STM32F4为例
#define MAX_SIZE 110*1024 //总字节数 = MAX_BLOCK * MIN_SIZE
#define MIN_SIZE 32 //最小分配空间字节大小
#define MAX_BLOCK 50 //记录块大小 块大小必须 < MAX_SIZE/MIN_SIZE,注意不可等于因为内存对齐时预留空间。
#define END_BLOCK MAX_BLOCK-1 //记录块末端块
#define MEM_UINT unsigned int
#define MEM_UCHAR unsigned char
#define MEM_INT int
/*****配置只需下面两步填写******/
#define MAX_SIZE 110*1024 //总字节数 = MAX_BLOCK * MIN_SIZE
#define MAX_BLOCK 50 //记录块大小 块大小必须 < MAX_SIZE/MIN_SIZE,注意不可等于因为内存对齐时预留空间。
1.MAX_SIZE:这个是动态内存大小;
2.MAX_BLOCK:最多动态内存分的块。
3.调用时必须初始化:mymeminit();内存块初始化函数.
/*****下面这个就是根据不同单片机修改*******/
#define MEM_UINT unsigned int
#define MEM_UCHAR unsigned char
#define MEM_INT int
具体管理多个内存的方法大家可以上面的
在malloc.c里面将分区表多定义几个就可以了。 |