stm32的flash和ram占用情况

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
GD32F105RBT612864LQFP64
VSCODE 编译 text data bss dec 字段含义

text:代码段,存储在FLASH中

data:初始化数据 数据段

bss:未初始化数据 数据段

dec = text + data + bss

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值