堆栈记录(stm32为例)

目录

1、堆栈是什么

2、堆栈的意义


1、堆栈是什么

使用keil对一个未编译的工程编译(如果是编译过的不会这样打印,直接错误警告)

其中

.map文件对其做了记录,在编译器(这里是keil)输出的路径下

 其中RW是SRAM,ROM是Flash

 栈顶指针应该是0X20000428(进入调试后,查看寄存器)

 这里我们看下是stm32f103的存储信息,可以看到其实有两种,一种是64KB,一种是128KB,这里不讨论差异,用64k肯定是没问题的

 从keil设置来看

分配了64k的ROM 

RAM大小为20K 

然后在下载这里可以看到选的是128k的这种芯片模型

上面还可以看到起始地址,起始地址可以在md.s文件中进行配置

 当然我们如果关注keil下面的这个符号,也可以比较容易的编辑

 这个是keil可视化的配置,很有意思的

详情见这篇博客Keil Configuration Wizard 使用说明_滴水成河 百川归海-CSDN博客_wizard

2、堆栈的意义

前面只是说了堆栈是什么,但是为什么要设置堆栈还没有说明白,因此这里就说明下为什么要设置堆区和栈区。

程序编译完成之后,静态变量以及全局变量等就都已经分配好内存地址了,但是在函数运行的时候还会产生很多局部变量,这些局部变量就需要我们给他分配栈空间,当中断来临的时候,也需要将函数指针入栈,保护现场,这样才能方便就是中断处理完成之后再回到之前的函数。

而堆是给程序员自行调用的,就是使用malloc这个函数来分配内存空间,一般初学者都不太用的到这个函数。

一般而言,栈区是从高到低进行分配,堆区从低到高分配。

  • 4
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

桃成蹊2.0

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值