打印

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

[复制链接]
3959|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函数就可以不用分配了吗?

使用特权

评论回复
5
mcuisp| | 2010-3-19 13:05 | 只看该作者
stm32级别的嵌入式系统,最好不要用heap动态分配,会影响可靠性。

使用特权

评论回复
6
ShakaLeo| | 2010-3-19 13:25 | 只看该作者
4楼:
一般来说是这样,不过貌似有些库函数也需要使用堆空间,具体是什么记不清了。个人建议还是留几十个字节做堆空间吧。

使用特权

评论回复
7
ShakaLeo| | 2010-3-19 13:25 | 只看该作者
4楼:
一般来说是这样,不过貌似有些库函数也需要使用堆空间,具体是什么记不清了。个人建议还是留几十个字节做堆空间吧。

使用特权

评论回复
8
mcuisp| | 2010-3-19 13:28 | 只看该作者
除了malloc这几个函数是处理heap的外,不会有其他库函数指定要heap的。

使用特权

评论回复
9
ShakaLeo| | 2010-3-19 14:07 | 只看该作者
凡事不绝对。有兴趣的朋友可以试试IAR的stdio.h中的函数fopen需要不需要堆空间。

使用特权

评论回复
10
mcuisp| | 2010-3-19 17:33 | 只看该作者
呵呵,我只用用memcpy啥的。没用过高级函数 。
谢LS提醒。
以后把这些用到heap的库函数,也全部打入冷宫。

使用特权

评论回复
11
pkat| | 2010-3-19 18:21 | 只看该作者
一般什么样的系统才可以用动态分配

使用特权

评论回复
12
mcuisp| | 2010-3-19 18:52 | 只看该作者
个人感觉,任务多样化的系统才需要动态分配。
比如PDA,今天玩游戏,明天上QQ。
而任务单一化的嵌入系统,就无需动态分配了。

使用特权

评论回复
13
电子乌托邦|  楼主 | 2010-3-20 09:25 | 只看该作者
在一个子函数中定义一个数组:
void fun1(void)
{
     char a[10] ;
  ....
}

请问在内存里是如何分配的呢!那位大侠给普及一下!

使用特权

评论回复
14
ShakaLeo| | 2010-3-20 15:42 | 只看该作者
ARM编译器的局部变量应该都是在栈空间里的。

使用特权

评论回复
15
yybj| | 2010-3-20 20:33 | 只看该作者
是的,一般存放局部变量的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

140

主题

633

帖子

2

粉丝