初级会员

- 积分
- 94
- 金钱
- 94
- 注册时间
- 2014-10-22
- 在线时间
- 24 小时
|
5金钱
现在看到很多程序,对板子的内存都是自己手动管理的,通过类似以下这样的方式初始化
void mem_init(void)
{
uint32_t malloc_start, malloc_size;
malloc_start = (uint32_t) &Image$$RW_IRAM1$$ZI$$Limit; //取空闲内存最低地址
malloc_start = (malloc_start + 3) & (~0x03);// ALIGN TO word 字节对齐
//0x20000为板子内存总大小
malloc_size = 0x20000000 + (128*1024) - malloc_start;
sys_meminit((void*)malloc_start, malloc_size);
}
现在就是有疑问 Image$$RW_IRAM1$$ZI$$Limit 取空闲内存最低地址 这个我有点不清除。
按照我自己的理解是:假如内存64k,地址从0x20000000开始,我的程序里面用到全局变量,局部变量,数组等等占用空间20k,则20k的内存空间不需要我管,他是编译器自动在地址0x2000000开始排,排满20k,也就是使用的内存地址为0x20000000 ~ 0x20004fff ,那Image$$RW_IRAM1$$ZI$$Limit 这个是不是就是指代0x20005000,我自己管理从0x20005000开始到最后的所有内存。
请各位大侠给予我详解,thanks!!
|
|