ARM芯片内部堆栈的理解及MAP文件的查看
STM32再启动的时候RAM首先分配给使用到的全局变量,及调用库占用的一些数据(不太清楚是什么数据),然后再将剩余的空间分配给Heap和stack。
****以下是网上关于Heap和Stack的说:****
(1)栈区(stack):由编译器自动分配和释放,存放函数的参数值、局部变量的值等,其操作方式类似于数据结构中的栈。
(2)堆区(heap):一般由程序员分配和释放,若程序员不释放,程序结束时可能由操作系统回收。分配方式类似于数据结构中的链表。 Malloc函数分配的地址在堆区。
(3)全局区(静态区)(static):全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束后由系统自动释放。
(4)文字常量区:常量字符串就是存放在这里的。
(5)程序代码区:存放函数体的二进制代码。
RAM分区:
栈区访问是从高地址向低地址,
堆区访问是从低地址向高地址。
Map文件的阅读:
.data(数据段) 初始化的全局变量和静态变量
.bss(BSS段)未初始化的全局变量和静态变量,编译器自动初始化。
在MDK(Keil)编译过程中,内存的划分如下:
Code是存储程序代码的。
RO-data是存储const常量和指令。
RW-data是存储初始化值不为0的全局变量。
ZI-data是存储未初始化的全局变量或初始化值为0的全局变量。
Flash=Code + RO Data + RW Data;
RAM= RW-data+ZI-data;
此内存划分暂未包括堆栈,堆栈会在程序运行时,占用RAM。
堆栈的内存占用就是MDK里,RAM分配给RW-data+ZI-data之后的地址开始分配的。
如何查看malloc申请的堆区地址:
unsigned char *str;
str = (unsigned char *)malloc(0x100000);
**sysprintf("str addr111 =%x\n\r",str);**
free(str);
注意:malloc申请的空间是在堆区里。
ARM芯片内部堆栈的理解及MAP文件的查看相关推荐
- ARM 之十 ARMCC(Keil) map 文件(映射文件)详解
在看这篇文章之前 需要对 ARM ELF 文件有一定的了解.了解什么是域(Region).节(Section,也称为节区).段(Segment).镜像(Image).镜像文件(Image File)等 ...
- 结合drwtsn32.log和.Map文件的查看、定位程序错误位置
写下大致步骤方便以后查找 参考内容在两个链接的后半部分 http://blog.csdn.net/nokianasty/article/details/8504432 http://blog.chin ...
- STM32中堆栈的理解
STM32中堆栈的理解 关于程序的内存分配 栈区(stack):由编译器自动分配和释放,存放函数的参数与返回值.局部变量等. 堆区(heap):由程序员分配管理,一般未使用(malloc函数). 全局 ...
- 通俗来理解 ARM芯片内核,架构,指令集,软核和硬核之间的关系
1.单片微型计算机: 简称单片机,简单来说就是集CPU(运算.控制).RAM(数据存储-内存).ROM(程序存储).输入输出设备(串口.并口等)和中断系统处于同一芯片的器件,在我们自己的个人电脑中,C ...
- Arm芯片上电启动流程剖解
关键字: stepping stone:(可以看做是Internal RAM) IROM (Internal ROM):固化在CPU内部ROM里的一段代码,它的运行叫做BL0. IRAM: 因为IRO ...
- ARM芯片外围电路介绍
任何一款处理器都有它的外围电路,其中包括电源电路,复位电路,晶振电路,外部存储器电路等等.通过阅读相关书籍以及实际的使用经验,这里简单介绍一下ARM芯片外围电路,类似电源电路.复位电路.晶振电路等大家 ...
- ARM芯片上电启动流程
下图是大多数开发板所有的一个存储单元框架,接下来以此图为基础描述ARM芯片的上电启动流程. 我们首先来了解几个关键词: IROM (Internal ROM):芯片内部固化存储代码的存储器 IRAM ...
- ARM芯片、内核、架构、指令集的联系与区别
问题1:单片机和CPU的区别 在嵌入式领域ARM芯片和CPU有什么区别呢?其实随着嵌入式科技的不断发展,单片机(像ARM芯片)和CPU的界限越来越模糊,我们暂且可以认为ARM芯片就是一个CPU,或者暂 ...
- 嵌入式系统(二):ARM芯片及体系架构(上)
文章结构 一. ARM芯片主要类别 二.ARM Cortex-M3简介 1.Cortex-M3功能说明 2.Cortex M3的总线接口 3.寄存器组说明 (1)低组寄存器,高组寄存器 (2)堆栈指针 ...
最新文章
- CKeditor 配置使用
- Django中Mysql数据库的使用
- python关联规则挖掘_Python3:文本关联规则挖掘实现案例分析
- SQLite数据库简介
- jzoj6824-[2020.10.17提高组模拟]英雄联盟【期望】
- centos6.7x86_64php7安装笔记 new
- OpenCV之图像梯度(笔记11)
- Exchange Server 2016 独立部署/共存部署 (七)—— DAG功能测试
- opc 多点位一次性读_如何使用Excel通过OPC访问WinCC的实时数据
- AngularJS app.run()文档?
- Agisoft Metashape Professional for Mac(三维建模软件)
- 关注Linux防火墙之介绍iptables与ufw命令
- 用户服务协议和隐私政策
- 《万国觉醒》之游戏战报FreeMarker模板引擎实现
- 屏幕录像专家使用手册
- js微信抢红包脚本代码_autojs抖音抢红包脚本!源码分享
- 高通开发笔记---yukon worknote
- Win10:解决Win10的录音设备只能录制系统内部声音无法录制麦克风声音的问题
- OO第二单元电梯作业总结
- 网站制作系列教程--前端代码
热门文章
- 第21届国际足联世界杯观后感
- Error starting userland proxy: listen tcp4 0.0.0.0:8005: bind: address alrea
- VB完全控制IE浏览器,操作ie对象,响应ie事件
- trueOS能装linux软件,TrueOS 17.12发布下载,一款基于FreeBSD的桌面Linux系统
- 吉林大学计算机学院学位预警,长春新区发布2021年学位预警!7所学校学位告急!...
- Android关于网络访问app应用开发相关的异常总结
- 路路通软件android版,家校路路通app
- ios绘图_使用Pencilkit轻松将绘图功能添加到ios应用
- 最简单DIY基于ESP32CAM的物联网相机系统⑥(用上位机VS2013 MFC实现WIFI图传)
- Mac 共享WiFi给任意设备(Android,Iphone等等)