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;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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 让容器管理更轻松!