堆栈记录(stm32为例)
目录
1、堆栈是什么
2、堆栈的意义
1、堆栈是什么
使用keil对一个未编译的工程编译(如果是编译过的不会这样打印,直接错误警告)
其中
.map文件对其做了记录,在编译器(这里是keil)输出的路径下
其中RW是SRAM,ROM是Flash
栈顶指针应该是(进入调试后,查看寄存器)
这里我们看下是的存储信息,可以看到其实有两种,一种是64KB,一种是128KB,这里不讨论差异,用64k肯定是没问题的
从keil设置来看
分配了64k的ROM
RAM大小为20K
然后在下载这里可以看到选的是128k的这种芯片模型
上面还可以看到起始地址,起始地址可以在md.s文件中进行配置
当然我们如果关注keil下面的这个符号,也可以比较容易的编辑
这个是keil可视化的配置,很有意思的
详情见这篇博客Keil 使用说明_滴水成河 百川归海-CSDN博客
2、堆栈的意义
前面只是说了堆栈是什么,但是为什么要设置堆栈还没有说明白,因此这里就说明下为什么要设置堆区和栈区。
程序编译完成之后,静态变量以及全局变量等就都已经分配好内存地址了,但是在函数运行的时候还会产生很多局部变量,这些局部变量就需要我们给他分配栈空间,当中断来临的时候,也需要将函数指针入栈,保护现场,这样才能方便就是中断处理完成之后再回到之前的函数。
而堆是给程序员自行调用的,就是使用这个函数来分配内存空间,一般初学者都不太用的到这个函数。
一般而言,栈区是从高到低进行分配,堆区从低到高分配。