自己写的内存块管理办法

内存管理模块
一、所有的实时操作系统都有自己的内存管理系统,目前的代码是把内存块管理模块自己实现了,其实RTX5有自己的内存块管理系统没必要自己去实现,CSDN链接如下:
https://blog.csdn.net/Zhangdfhvxdul/article/details/145474093

二、自己实现内存管理模块的方法:

//内存块的定义,这里知识举个例子,应该还有1024、4K等等缓存的管理
#define MEM64_SIZE 64 // 每块内存长度
#define MEM64_NUM 256 // 内存块个数
typedef struct
{
    INT8U used; // 0=未用;1=占用
    INT8U buf[MEM64_SIZE];
    INT16U Idx; // 内存块标号,这个变量没有用到
} MEM_BLOCK_64;

//管理内存块的结构体
typedef struct
{
    INT16U mem64UsedNum;
    INT16U mem256UsedNum;
    INT16U mem1KUsedNum;
    INT16U mem4KUsedNum;
    INT16U mem64UsedMaxNum;
    INT16U mem256UsedMaxNum;
    INT16U mem1KUsedMaxNum;
    INT16U mem4KUsedMaxNum;
} MEM_USED_CFG;
typedef struct
{
    MEM_USED_CFG memUsedCfg;
    MEM_BLOCK_64 Mem64[MEM64_NUM];
    MEM_BLOCK_272 Mem272[MEM272_NUM];
    MEM_BLOCK_1K Mem1K[MEM1K_NUM];
    MEM_BLOCK_4K Mem4K[MEM4K_NUM];
    MEM_BLOCK_16K Mem16K[MEM16K_NUM];
    MEM_BLOCK_40K Mem40K[MEM40K_NUM];
} MEM_BLOCK_SYS;

//内存块的全局变量
MEM_BLOCK_SYS sysMemBlock;

// 系统内存管理结构
typedef struct
{
    INT32U OSMemBlkIdx;  // 内存块标号
    INT32U OSMemBlkSize; // Size (in bytes) of each block of memory
    void *OSMemAddr;     // Pointer to beginning of memory partition
} OS_MEM_SYS;

//内存块的初始化
void InitMem(void)
{

你可能感兴趣的:(RTX实时操作系统,嵌入式软件)