stm32的flash和ram占用情况

在stm32中flash就是ROM,掉电数据不会丢失;(通常保存着text段、Code、Ro-data、Rw-data)
RAM就是运行内存,掉电数据就丢失;(通常保存着堆、栈、bss段、data段、ZI-data、RW-data)

编译生成的主要有代码区、只读数据区、读写数据区、初始化值为0数据区。FLASH由代码区、只读数据区 和 读写数据区占用。RAM由读写数据区 和 初始化值为0 的数据区占用。

KEIL5 编译结果分析

在keil中编译结果如下图:


打开生成的map文件拉到最后可看到如下:

编译结果里面几个的含义
Code:代码空间,本质是ARM指令( FLASH)。
RO-data:即 Read Only-data, 表示程序定义的常量,如 const 类型( FLASH)。
RW-data:即 Read Write-data, 非0初始化的全局和静态变量占用的RAM大小,同时还要占用等量的ROM大小用于存放这些非0变量的初值(FLASH+RAM)。
ZI-data:即 Zero Init-data, 0初始化的内存区的大小(该区域3个用途:0初始化的全局和静态变量+堆区+栈区)(RAM)。

由上可知:
程序占用FLASH=Code + RO-data + RW-data 即map文件中ROM size
程序占用RAM = RW-data + ZI-data 即map文件中RW size
RW-data为什么会即占用Flash又占用RAM空间?
由前文知道RAM掉电数据会丢失,RW-data是非0初始化的数据,已初始化的数据需要被存储在掉电不会丢失的FLASH中,上电后会从FLASH搬移到RAM中。

我们都知道在烧写程序的时候,需要烧写bin文件或者hex文件到STM32的flash中,被烧写的文件称为映像文件image。image的内容包含这三个Code 、 RO-data 和 RW-data。
为什么不包含ZI-data呢?通过上一个问题大家可能应该理解了,因为ZI数据是0,没必要包含,只要在程序运行前把ZI数据区域一律清零即可,包含进去反而浪费Flash存储空间。

型号 FLASH(KB) RAM(KB) FOOTPRINT
GD32F105RBT6 128 64 LQFP64

VSCODE 编译 text data bss dec 字段含义

text:代码段,存储在FLASH中

data:初始化数据 数据段

bss:未初始化数据 数据段

dec = text + data + bss

stm32的flash和ram占用情况相关推荐

  1. 【IoT】STM32 查看 FLASH 和 RAM 使用情况(RO-data、RW-data、ZI-data)

    1.KEIL MDK 编译后的信息 Code=86496 RO-data=9064 RW-data=1452 ZI-data=16116 1)Code 是代码占用的空间: 2)RO-data 是 Re ...

  2. stm32 FATFS文件系统如何减少Flash和RAM占用,FATFS移除中文文件名,FATFS移除动态内存

    FATFS 下载地址:FATFS源码下载 FATFS 移植的过程中,主要用到三个文件:ff.c.diskio.c.ffconf.h. 移植FATFS不需要过多的操作,过程很是方便,步骤为: 补全 di ...

  3. stm32 Keil编译后查看代码/内存占用空间,Flash/RAM占用大小,Code-Data,RO-Data,RW-Data,ZI-Data是什么含义

    1. 查看码Flash/内存RAM占用大小 工程编译后,双击上图中红框位置,会打开 .map文件,包含了各个函数和文件占用的空间大小和地址. 2. Code-Data,RO-Data,RW-Data, ...

  4. STM32 内部Flash读写 程序源码 [已验证]

    目录 STM32 内部Flash带缓存读写 程序源码 0 Macro 1.Flash_Erase 2. Flash_Read_Byte 3.Flash_Write_NoBuffer 4.Flash_W ...

  5. stm32内部Flash读写

    文章目录 1.stm32内部flash介绍 2.读写驱动编写 3.源码 上篇文章讲到了STM32来驱动外部flah的操作,flash真是好东西啊,内存大,能存的东西多,这样我们就可以用它来做一些大点的 ...

  6. KEIL MDK 查看代码量、RAM使用情况--Code、RO-data、RW-data、ZI-data的解释

    KEIL MDK 查看代码量.RAM使用情况--Code.RO-data.RW-data.ZI-data的解释 原创李宜君 最后发布于2019-01-16 09:10:19 阅读数 146  收藏 展 ...

  7. map文件分析 stm32_使用STM32内部Flash额外的空间来存储数据

    本次分享关于STM32内部FLASH的笔记. STM32 芯片内部的 FLASH 存储器,主要用于存储我们代码.如果内部FLASH存储完我们的代码还有剩余的空间,那么这些剩余的空间我们就可以利用起来, ...

  8. STM32F4内的FLASH和RAM

    STM32F4内的FLASH和RAM(CCM) 单片机的flash和RAM,可以简单理解为电脑的硬盘和内存条. FLASH 什么是FLASH?FLASH的作用? 掉电不丢失数据,能够存储数据的存储器, ...

  9. 为什么STM32设置Flash地址0x08000000而不是0x00000000?STM32的启动过程

    STM32F103ZE芯片存储空间的地址映射关系图. 在MDK编译程序设置ROM和RAM地址时候发现: IROM1为片上程序存储器,即片上集成的Flash存储器,对该处理器Flash大小为512KB, ...

最新文章

  1. shell 边边角角
  2. .NET Core微服务之基于Ocelot+IdentityServer实现统一验证与授权
  3. Linux新手要了解的十个知识点
  4. 【Problem solved】 error C2665: “loadimage”: 2 个重载中没有一个可以转换所有参数类型...
  5. 《Linux From Scratch》第一部分:介绍 第一章:介绍-1.3. 更新日志
  6. python post请求rsa加密_Python的加密方式:RSA加密
  7. halcon使用直线标定板,标定相机内参代码
  8. JVM优化系列-Java对象引用与可触及强度
  9. 计算机主机硬件详细介绍,计算机系统的硬件和系统软件详细介绍
  10. 阿里依然在“飙车”!第一财季净利润309.49亿元 同比增长54%
  11. 让计划任务生成的文件中包含当前日期
  12. 小学在班里排第几名家长才比较放心?
  13. python 绘制柱状图
  14. 清除SQLServer日志
  15. Java菜鸟教程 递归算法与Scanner类
  16. 左耳朵耗子 | 程序员如何用技术变现?
  17. python 处理xml
  18. 微分几何笔记(3) —— Frenet标架及Frenet方程组
  19. Coursera课程自然语言处理(NLP) 借助概率模型做自然语言处理 deeplearning.ai
  20. VERY DEEP CONVOLUTIONAL NETWORKS FOR LARGE-S CALE IMAGE RECOGNITION-论文笔记

热门文章

  1. 【RL-TCPnet网络教程】第4章 RL-TCPnet网络协议栈简介
  2. R语言科学计数法数据改变/丢失/失准,取消科学计数法的原因和解决方法
  3. 如何高效阅读一篇论文?来自18位教授、主编和博士生的最好建议!
  4. SceneKit做一个旋转的地球效果
  5. Python基础教程(第三版)读书笔记(5)
  6. 游戏开发杂记(一) 万事开头难
  7. 工控服务器什么作用,服务器与工控机的用处和区别在哪?
  8. Vue+MySQL实现登录注册案例
  9. Java获取指定日期前一天、后一天,当月第一天、当月最后一天
  10. CP8.可解性与解的结构