STM32 编译结果 map 之 code、RO-data、RW-data、ZI-data 字段解析

发布者:SereneNature7最新更新时间:2021-02-09 来源: eefocus关键字:STM32  编译结果 手机看文章 扫描二维码
随时随地手机看文章

1、Code

即代码域,它指的是编译器生成的机器指令,这些内容被存储到ROM区。


2、RO-data

Read Only data,即只读数据域,它指程序中用到的只读数据,这些数据被存储在ROM区,因而程序不能修改其内容。


例如:

C语言中const关键字定义的变量就是典型的RO-data。


3、RW-data

Read Write data,即可读写数据域,它指初始化为“非0值”的可读写数据,程序刚运行时,这些数据具有非0的初始值,且运行的时候它们会常驻在RAM区,因而应用程序可以修改其内容。


例如:

C语言中使用定义的全局变量,且定义时赋予“非0值”给该变量进行初始化。


4、ZI-data

Zero Initialie data,即0初始化数据,它指初始化为“0值”的可读写数据域,它与RW-data的区别是程序刚运行时这些数据初始值全都为0,而后续运行过程与RW-data的性质一样,它们也常驻在RAM区,因而应用程序可以更改其内容。


例如:

C语言中使用定义的全局变量,且定义时赋予“0值”给该变量进行初始化.。


若定义该变量时没有赋予初始值,编译器会把它当ZI-data来对待,初始化为0。


ZI-data的栈空间(Stack)及堆空间(Heap):

在C语言中,函数内部定义的局部变量属于栈空间,进入函数的时候从向栈空间申请内存给局部变量,退出时释放局部变量,归还内存空间。


而使用malloc动态分配的变量属于堆空间。在程序中的栈空间和堆空间都是属于ZI-data区域的,这些空间都会被初始值化为0值。


编译器给出的ZI-data占用的空间值中包含了堆栈的大小(经实际测试,若程序中完全没有使用malloc动态申请堆空间,编译器会优化,不把堆空间计算在内)。

关键字:STM32  编译结果 引用地址:STM32 编译结果 map 之 code、RO-data、RW-data、ZI-data 字段解析

上一篇:STM32 文件系统 fatfs 移植笔记详解
下一篇:STM32 查看 FLASH 和 RAM 使用情况(RO-data、RW-data、ZI-data)

推荐阅读最新更新时间:2024-11-17 01:46

STM32简单任务调度的总结
概述 STM32的开发目前大多数还开处于“裸奔”的阶段,处于开发成本的考虑,可能还未嵌入任何的RTOS系统,由于没有操作系统的支持,因而不能方便的对多任务进行调度和管理。而有的任务不紧急,不需要过多的时间去循环执行,因此需要一个简单的任务调度来解决这个问题。 STM32F103ZE的AHB时钟为72MHz,通过HSE的8M倍频到72M,然后APB1预分频系数为2,所以TIM2-7时钟为2*36M。由于定时器是16位,PSC寄存器最大为65536,不支持71999,所以只能以0.1ms计数。 整个系统在获取时间的累增时,定义64位变量,即可运行很久的时间,不用担心溢出或者死机。定义64位变量有2个方法,一就是用long lo
[单片机]
一步一步实现STM32-FOTA系列教程之Bootloader编写
前言 上一篇文章《一步一步实现STM32-FOTA系列教程之FLASH静态区读写》实现了对FLASH静态区读写的操作,有了这部分功能之后,就可以实现一个非常简单的Bootloader代码了。 转载请注明出处 Bootloader 功能说明 这里提供的Bootloader功能就非常的简单了,就是在Bootloader启动之后,读取FLASH静态区的参数信息,然后判断启动分区标志位的值,然后进入相应的分区,运行该分区的程序。 注意这里的教程中没有在 Bootloader 中编写联网获取新版本的代码,这部分的实现会放到主分区和备份分区的代码中实现。 Bootloader 启动流程 这个启动流程之前已经说过了,这里贴出来,
[单片机]
一步一步实现STM32-FOTA系列教程之Bootloader编写
STM32 ST-LINK Utility程序烧录方法
打开软件过后点击Target-》connect 出现以下界面表示STlink链接成功 如果出现没有检测到stlink的话,首先查看是否安装驱动程序,再重新插拔电脑usb口的stlink连接线(或者链接到主机后方的usb口) 再重复以上步骤链接,链接成功过后再次点击Target然后点击AutoMatic Mode 然后选择升级的HEX文件然后点击Start 显示以上信息表示程序烧录完成 软件官网下载比较麻烦这里附上下载链接(内容包含ST-Link驱动) https://cloud.189.cn/web/share?code=VJZre2EzmiIf(访问码:n9rt)
[单片机]
<font color='red'>STM32</font> ST-LINK Utility程序烧录方法
STM32信息安全—加解密硬件模块
STM32的真随机数产生器 TRNG 基于物理噪声源的随机数产生器 生成32位随机数 AHB从设备,不使用时可关闭它以节省功耗 广泛运用于加解密算法和协议中:密钥的生成;“Challenge- Acknowledge”认证模式中,充当Challenges(质询);初始向量(IV);随机数 STM32的对称加解密加速器 AES 支持的算法模式有:AES – ECB、CBC、CTR;AES – GCM、CCM、GMAC;密钥长度:128位,256位可选 支持DMA加载输入和读取输出 该模块经过NIST FIPS认证 集成该对称加解密硬件加速模块的STM32系列有 STM32的对称加解密加速器 Crypto 支
[单片机]
STM32中VDDA为什么也要接电源才能烧录程序?
VDDA为所有的模拟电路部分供电,包括: ADC模块,复位电路,PVD(可编程电压监测器),PLL,上电复位(POR)和掉电复位(PDR)模块,控制VBAT切换的开关等。即使不 使用ADC功能,也需要连接VDDA,强烈建议VDD和VDDA使用同一个电源供电。VDD与VDDA之间的电压差不能超过300mV,VDD与VDDA 应该同时上电或调电。 VDDA,VSSA是模拟部分的 电源 ,因为它连接着复位电路,所以这个必须接,否则无法下载代码。 Power supply schemes(供电方案) • VDD = 2.0 to 3.6 V: external power supply for I/Os and the inte
[单片机]
STM32STM32时钟系统和SystemInit函数解读
时钟系统就是CPU的脉搏,像人的心跳一样,重要性不言而喻。由于STM32本身十分复杂,外设非常多,但并不是所有的外设都需要系统时钟那么高的频率,比如看门狗以及RTC只需要几十k的时钟即可。并且,同一个电路,时钟越快功耗越快,同时抗电磁干扰能力也就越弱,所以较为复杂的MCU都是采用多时钟源的方法来解决这些问题。 STM32F1xx官方资料: 《STM32中文参考手册V10》-第六章 复位和时钟控制 RCC STM32的时钟系统 STM32的时钟系统图 上图是STM32的时钟系统图。STM32 有5个时钟源:HSI、HSE、LSI、LSE、PLL,在图中有红色方框标记的位置。从时钟频率来分可以分成高速时钟源和低速时钟
[单片机]
【<font color='red'>STM32</font>】<font color='red'>STM32</font>时钟系统和SystemInit函数解读
怎样在Linux上开发STM32程序
步骤1:下载所需的一切 您需要下载三个部分才能正常工作: 用于ARM的GCC编译器 STM32固件文件 St-link实用程序 Sample Project 编译器是将我们的C代码和所有其他库文件编译成stm32控制器可以理解的机器语言的主要软件。下载此编译器的最新预编译版本。 包含STM32固件的文件夹是保存主处理器运行所需的所有启动文件和核心文件的文件夹。我们将使用HAL已超越的标准外围设备库。我更喜欢StPeriphLibrary,因为使用该处理器的公司都在使用它们,因为它功能强大,更老旧并且受支持。它也更坚固。它不会减少初始化外围设备或打开LED所需的工作,但是会迫使您学习这些处理器的工作方式。这样一来,您将对内部工作
[单片机]
怎样在Linux上开发<font color='red'>STM32</font>程序
stm32的IO重映射
图片内容来自《电子系统设计与实战 stm32+FPGA控制版》 下面调用GPIO_PinRemapConfig(GPIO_Remap_SPI1,ENABLE);直接就把SPI1的所有IO换成了映射IO。
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved