STM32启动代码 ---堆 而非栈疑问

[复制链接]
4874|14
 楼主| 电子乌托邦 发表于 2010-3-19 11:53 | 显示全部楼层 |阅读模式
Heap_Size       EQU     0x00000200
                AREA    HEAP, NOINIT, READWRITE, ALIGN=3
__heap_base
Heap_Mem        SPACE   Heap_Size
__heap_limit

看到启动代码里这段代码
定义了堆
请问大家,定义堆干嘛用的。我知道栈的用处,比如子程序,中断保存现场的,堆干嘛的呢?
lxyppc 发表于 2010-3-19 12:20 | 显示全部楼层
猜测是给malloc之类的函数用的
ShakaLeo 发表于 2010-3-19 12:22 | 显示全部楼层
这个google一下应该就知道了,堆空间可以用来动态地分配内存空间,如stdlib.h头文件中的库函数malloc和free。
 楼主| 电子乌托邦 发表于 2010-3-19 13:05 | 显示全部楼层
楼上朋友的意思是不用malloc和free函数就可以不用分配了吗?
mcuisp 发表于 2010-3-19 13:05 | 显示全部楼层
stm32级别的嵌入式系统,最好不要用heap动态分配,会影响可靠性。
ShakaLeo 发表于 2010-3-19 13:25 | 显示全部楼层
4楼:
一般来说是这样,不过貌似有些库函数也需要使用堆空间,具体是什么记不清了。个人建议还是留几十个字节做堆空间吧。
ShakaLeo 发表于 2010-3-19 13:25 | 显示全部楼层
4楼:
一般来说是这样,不过貌似有些库函数也需要使用堆空间,具体是什么记不清了。个人建议还是留几十个字节做堆空间吧。
mcuisp 发表于 2010-3-19 13:28 | 显示全部楼层
除了malloc这几个函数是处理heap的外,不会有其他库函数指定要heap的。
ShakaLeo 发表于 2010-3-19 14:07 | 显示全部楼层
凡事不绝对。有兴趣的朋友可以试试IAR的stdio.h中的函数fopen需要不需要堆空间。
mcuisp 发表于 2010-3-19 17:33 | 显示全部楼层
呵呵,我只用用memcpy啥的。没用过高级函数 。
谢LS提醒。
以后把这些用到heap的库函数,也全部打入冷宫。
pkat 发表于 2010-3-19 18:21 | 显示全部楼层
一般什么样的系统才可以用动态分配
mcuisp 发表于 2010-3-19 18:52 | 显示全部楼层
个人感觉,任务多样化的系统才需要动态分配。
比如PDA,今天玩游戏,明天上QQ。
而任务单一化的嵌入系统,就无需动态分配了。
 楼主| 电子乌托邦 发表于 2010-3-20 09:25 | 显示全部楼层
在一个子函数中定义一个数组:
void fun1(void)
{
     char a[10] ;
  ....
}

请问在内存里是如何分配的呢!那位大侠给普及一下!
ShakaLeo 发表于 2010-3-20 15:42 | 显示全部楼层
ARM编译器的局部变量应该都是在栈空间里的。
yybj 发表于 2010-3-20 20:33 | 显示全部楼层
是的,一般存放局部变量的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

140

主题

633

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部