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;
}
posted @   thomas_blog  阅读(161)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示