OpenEdv-开源电子网

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

内存管理例程,内存参数设定问题

[复制链接]

36

主题

98

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
230
金钱
230
注册时间
2016-3-26
在线时间
83 小时
发表于 2017-1-17 14:41:51 | 显示全部楼层 |阅读模式
1金钱

//mem1内存参数设定.mem1完全处于内部SRAM里面.
#define MEM1_BLOCK_SIZE                        32                                                            //内存块大小为32字节
#define MEM1_MAX_SIZE                        100*1024                                                  //最大管理内存 100K
#define MEM1_ALLOC_TABLE_SIZE        MEM1_MAX_SIZE/MEM1_BLOCK_SIZE         //内存表大小

//mem2内存参数设定.mem2的内存池处于外部SRAM里面
#define MEM2_BLOCK_SIZE                        32                                                            //内存块大小为32字节
#define MEM2_MAX_SIZE                        960 *1024                                                  //最大管理内存960K
#define MEM2_ALLOC_TABLE_SIZE        MEM2_MAX_SIZE/MEM2_BLOCK_SIZE         //内存表大小
                 
//mem3内存参数设定.mem3处于CCM,用于管理CCM(特别注意,这部分SRAM,仅CPU可以访问!!)
#define MEM3_BLOCK_SIZE                        32                                                            //内存块大小为32字节
#define MEM3_MAX_SIZE                        60 *1024                                                  //最大管理内存60K
#define MEM3_ALLOC_TABLE_SIZE        MEM3_MAX_SIZE/MEM3_BLOCK_SIZE         //内存表大小



上述是例程中的参数设定,从mem2可以看出最大内存管理为960k byte,但是板子上用的sram为512*16bit的也就是 1024k byte,那为什么这里是960k呢?

最佳答案

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

1、堆和栈肯定是有固定区域的,看你的map文件就知道HEAP和STACK的起始地址和大小 2、全局变量的内存既不在堆里面,也不在栈里面。编译器会给他分配内存。 3、malloc申请的内存在堆里面 4、堆和栈应该不叫内存分配方法。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2017-1-17 14:41:52 | 显示全部楼层
1、堆和栈肯定是有固定区域的,看你的map文件就知道HEAP和STACK的起始地址和大小
2、全局变量的内存既不在堆里面,也不在栈里面。编译器会给他分配内存。
3、malloc申请的内存在堆里面
4、堆和栈应该不叫内存分配方法。
开往春天的手扶拖拉机
回复

使用道具 举报

36

主题

98

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
230
金钱
230
注册时间
2016-3-26
在线时间
83 小时
 楼主| 发表于 2017-1-17 15:33:26 | 显示全部楼层
顶顶顶顶
回复

使用道具 举报

13

主题

84

帖子

0

精华

高级会员

Rank: 4

积分
765
金钱
765
注册时间
2016-1-20
在线时间
129 小时
发表于 2017-1-17 15:44:17 | 显示全部楼层
16bit = 2 byte
回复

使用道具 举报

36

主题

98

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
230
金钱
230
注册时间
2016-3-26
在线时间
83 小时
 楼主| 发表于 2017-1-17 15:58:40 | 显示全部楼层

是啊,哪里有错嘛
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2017-1-17 16:39:04 | 显示全部楼层
因为SRAM还有一部分用来存储内存管理表!所以不能用完了!
回复

使用道具 举报

36

主题

98

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
230
金钱
230
注册时间
2016-3-26
在线时间
83 小时
 楼主| 发表于 2017-1-17 17:12:34 | 显示全部楼层
zuozhongkai 发表于 2017-1-17 16:39
因为SRAM还有一部分用来存储内存管理表!所以不能用完了!

还想问下,一般内存里有堆,栈,全局变量区,文字常量区,程序代码存储区,那么我外加一个sram,其内存空间是全加在堆上吗?
回复

使用道具 举报

36

主题

98

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
230
金钱
230
注册时间
2016-3-26
在线时间
83 小时
 楼主| 发表于 2017-1-17 17:22:10 | 显示全部楼层
zuozhongkai 发表于 2017-1-17 16:39
因为SRAM还有一部分用来存储内存管理表!所以不能用完了!

内存里 堆和栈有固定的地址区域吗?
  还是说,如果在内存里你定义的全是局部变量,那么内存里就全是栈,
    如果全是用malloc申请的空间,那么内存里全是堆,
那么是否可以认为,堆和栈只是对特定申请内存方式的一个叫法,在内存中没有固定的地址区域?

望指教。
回复

使用道具 举报

36

主题

98

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
230
金钱
230
注册时间
2016-3-26
在线时间
83 小时
 楼主| 发表于 2017-1-17 17:35:33 | 显示全部楼层



网站有bug,把你答案设置为正确答案后,上面显示你的答案发表于2小时前,明明才几分钟。 唉,多嘴了
UM@Z_J{GOZ9[NKMEK{8WNZR.png
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-23 20:34

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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