OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2826|回复: 3

stm32内存管理

[复制链接]

15

主题

49

帖子

0

精华

初级会员

Rank: 2

积分
94
金钱
94
注册时间
2014-10-22
在线时间
24 小时
发表于 2016-5-17 11:01:31 | 显示全部楼层 |阅读模式
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!!

最佳答案

查看完整内容[请看2#楼]

http://www.bubuko.com/infodetail-913176.html
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

7

主题

188

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2282
金钱
2282
注册时间
2013-12-16
在线时间
448 小时
发表于 2016-5-17 11:01:32 | 显示全部楼层
回复

使用道具 举报

7

主题

188

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2282
金钱
2282
注册时间
2013-12-16
在线时间
448 小时
发表于 2016-5-17 11:52:00 | 显示全部楼层
Image$$RW_IRAM1$$ZI$$Limit应该是个常数,由编译器定义的
回复

使用道具 举报

15

主题

49

帖子

0

精华

初级会员

Rank: 2

积分
94
金钱
94
注册时间
2014-10-22
在线时间
24 小时
 楼主| 发表于 2016-5-17 14:03:14 | 显示全部楼层
zdfwyh 发表于 2016-5-17 11:52
Image$$RW_IRAM1$$ZI$$Limit应该是个常数,由编译器定义的

什么样的常数?指代什么意思?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-9 07:31

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表