stm32为例 堆栈记录

目录
1、堆栈是什么
2、堆栈的意义
1、堆栈是什么
使用keil对一个未编译的工程编译(如果是编译过的不会这样打印 , 直接错误警告)
其中
.map文件对其做了记录 , 在编译器(这里是keil)输出的路径下
其中RW是SRAM,ROM是Flash
栈顶指针应该是(进入调试后 , 查看寄存器)
【stm32为例堆栈记录】这里我们看下是的存储信息 , 可以看到其实有两种 , 一种是64KB , 一种是128KB , 这里不讨论差异 , 用64k肯定是没问题的
从keil设置来看
分配了64k的ROM
RAM大小为20K

stm32为例  堆栈记录

文章插图
然后在下载这里可以看到选的是128k的这种芯片模型
上面还可以看到起始地址 , 起始地址可以在md.s文件中进行配置
当然我们如果关注keil下面的这个符号 , 也可以比较容易的编辑
这个是keil可视化的配置 , 很有意思的
详情见这篇博客Keil使用说明_滴水成河 百川归海-CSDN博客
2、堆栈的意义
前面只是说了堆栈是什么 , 但是为什么要设置堆栈还没有说明白 , 因此这里就说明下为什么要设置堆区和栈区 。
程序编译完成之后 , 静态变量以及全局变量等就都已经分配好内存地址了 , 但是在函数运行的时候还会产生很多局部变量 , 这些局部变量就需要我们给他分配栈空间 , 当中断来临的时候 , 也需要将函数指针入栈 , 保护现场 , 这样才能方便就是中断处理完成之后再回到之前的函数 。
而堆是给程序员自行调用的 , 就是使用这个函数来分配内存空间 , 一般初学者都不太用的到这个函数 。
一般而言 , 栈区是从高到低进行分配 , 堆区从低到高分配 。