堆栈记录(stm32为例)

阅读: 评论:0

堆栈记录(stm32为例)

堆栈记录(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这个函数来分配内存空间,一般初学者都不太用的到这个函数。

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

本文发布于:2024-02-02 19:56:38,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170687499846084.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:堆栈   为例
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23