一个简单而强大的单片机内存管理器-不带内存碎片整理

2019-04-15 17:55发布

单片机简单内存管理器 本代码基于无操作系统的STM32单片机开发,功能强大,可申请到地址空间连续的不同大小的内存空间,且用户接口简单,使用方便 转载请注明出处:http://blog.csdn.net/u011833609/article/details/46834203 memory.h [cpp] view plain copy  print?
  1. #ifndef __MEMORY_H__  
  2. #define __MEMORY_H__  
  3.   
  4. #include "stdio.h"  
  5. #include "string.h"  
  6. #include "includes.h"  
  7. //用户使用  
  8. typedef struct  
  9. {  
  10.     void    *addr;      //申请到的内存的起始地址  
  11.     uint32_t size;      //申请到的内存的大小,按照块大小分配,大于等于申请大小  
  12.     uint16_t  tb;        //申请表序号,申请内存时分配,释放内存时使用,用户不使用  
  13. }DMEM;  
  14.   
  15. //若返回空,则申请失败  
  16. DMEM *DynMemGet(uint32_t size);  
  17.   
  18. void DynMemPut(DMEM *pDmem);  
  19.   
  20.   
  21. #endif //__MEMORY_H__  

memory.c [html] view plain copy  print?
  1. #include "memory.h"  
  2.   
  3. #define DMEM_BLOCK_SIZE         256      //内存块大小为128字节  
  4. #define DMEM_BLOCK_NUM          20       //内存块个数为40个  
  5. #define DMEM_TOTAL_SIZE         (DMEM_BLOCK_SIZE*DMEM_BLOCK_NUM)    //内存总大小  
  6.   
  7. typedef enum  
  8. {  
  9.     DMEM_FREE   = 0,  
  10.     DMEM_USED   = 1,  
  11. }DMEM_USED_ITEM;  
  12.   
  13. typedef struct  
  14. {  
  15.     DMEM_USED_ITEM   used;       //使用状态  
  16.     uint16_t         blk_s;      //起始块序号  
  17.     uint16_t         blk_num;    //块个数  
  18. }DMEM_APPLY;  
  19.   
  20. typedef struct  
  21. {  
  22.     DMEM_USED_ITEM  tb_blk[DMEM_BLOCK_NUM];  
  23.     DMEM            tb_user[DMEM_BLOCK_NUM];        //用户申请内存信息  
  24.     DMEM_APPLY      tb_apply[DMEM_BLOCK_NUM];       //系统分配内存信息  
  25.     uint16_t        apply_num;      //内存申请表占用数目  
  26.     uint16_