UCOS内存管理

STM32F10xxx内置64K字节的静态SRAM。它可以以字节、半字(16位)或全字(32位)访问
SRAM的起始地址是0x20000000

UCOSII

//定义存储区
OS_MEM *DATA_MEM;   
//存储区中存储块数量(可申请次数)
#define DATA_MEM_NUM        10
//每个存储块大小
#define DATA_MEMBLOCK_SIZE  128
//内存地址
__align(4) CPU_INT08U data_RamMemp[DATA_MEM_NUM][DATA_MEMBLOCK_SIZE] __attribute__((at(0x20001000)));

/*
OS_MEM  *OSMemCreate (void   *addr,
                      INT32U  nblks,
                      INT32U  blksize,
                      INT8U  *perr);

申请:
void  *OSMemGet (OS_MEM  *pmem,
                 INT8U   *perr);

释放:
INT8U  OSMemPut (OS_MEM  *pmem,
                 void    *pblk);
*/
int main()
{
    INT8U err;

    DATA_MEM = OSMemCreate(data_RamMemp,
                DATA_MEM_NUM,
                DATA_MEMBLOCK_SIZE,
                &err);

    void *data = OSMemGet(DATA_MEM, &err);

    if(data)
    {
        OSMemPut(DATA_MEM, data);
    }

    return 0;
}

UCOSIII

OS_MEM DATA_MEM;    
#define DATA_MEM_NUM        5
#define DATA_MEMBLOCK_SIZE  64
__align(4) CPU_INT08U data_RamMemp[DATA_MEM_NUM][DATA_MEMBLOCK_SIZE] __attribute__((at(0x20002000)));

/*
void  OSMemCreate (OS_MEM       *p_mem,
                   CPU_CHAR     *p_name,
                   void         *p_addr,
                   OS_MEM_QTY    n_blks,
                   OS_MEM_SIZE   blk_size,
                   OS_ERR       *p_err);

void  *OSMemGet (OS_MEM  *p_mem,
                 OS_ERR  *p_err);

void  OSMemPut (OS_MEM  *p_mem,
                void    *p_blk,
                OS_ERR  *p_err);
*/

int main()
{
    OS_ERR err;

    OSMemCreate(&DATA_MEM,
                "data mem"
                data_RamMemp,
                DATA_MEM_NUM,
                DATA_MEMBLOCK_SIZE,
                &err);

    void *data = OSMemGet(&DATA_MEM, &err);

    if(data)
    {
        OSMemPut(&DATA_MEM, data, &err);
    }

    return 0;
}
原文地址:https://www.cnblogs.com/zhangxuechao/p/11709503.html