STM32的Code、RO-data、RW-data、ZI-data和RAM以及flash的关系

对于刚接触stm32编程的同学来说,通常不知道如何选择合适型号的芯片来开发自己的项目,下面就分析一下多大的片内ram以及flash能符合我们项目的需求。

不知道大家有没有注意到,我们的项目每次编译完成后,都会出现这个Program Size,然后后面跟着Code、RO-data、RW-data、ZI-data,其实这里就是编译软件在告诉我们,这个项目需要用到多少ram以及flash才能正常运行。

Program Size中各个参数的含义

1.Code(代码)

Code部分包括程序的被调用的函数代码量 ,如果只是被定义了,不被调用,那么不会增加到Code里面,Code被保存在我们MCU的flash里面。

(1)定义addcode函数前 code为1256

(2)定义addcode函数后,未调用,code依旧为1256

(3)调用addcode函数以后,Code增加到1272字节,由此可见,只有函数被调用以后,才会被存到flash计算到代码量中

2.RO-data**(只读数据)**

RO-data(只读数据) 表示所有被调用的全局常量数据 ,RO-data被保存在MCU的flash中,因为它们在程序执行期间不会被修改。

(1)定义了常量数组,被调用前,RO-data=460,RO-data没有增加

(2)定义了常量数组,被调用后,RO-data=464,RO-data增加了4,说明我们定义的全局常量只有被调用后才会加入到RO-data中

注意的是,此结果博主亲测只有在Optimization为Level 0的情况下,自己写的这个常量才被加入到RO-data中,在level 1/2/3的时候都被当做冗余量被优化。

3.RW-data(读写数据)

RW-data(读写数据)代表被调用的已经初始且初始化不为0的全局变量 ,RW-data会先被存储到flash里面,等待程序运行的时候,再被复制到RAM中,所以RW-data既占用一份flash,也会占用一份RAM

(1)定义变量数组,被调用前,RW-data=12字节。

(2)定义变量数组,被调用后,RW-data=1012字节,说明初始化后不为0的常量数组被调用后会增加到RW-data中。

4.ZI-data(零初始化数据)

ZI-data(零初始化数据)是被调用的初始化为0或者未初始化的全局变量 ,ZI-data被保存在我们MCU的RAM中。

(1)定义未初始化的数组被调用前,ZI-data=1292,无变化。

(2)定义未初始化的数组被调用后,ZI-data=2292,增加了1000,说明被调用到的未初始化的全局变量是存在ZI-data中的。

Program Size和RAM以及flash的关系

由上面分析得出

RAM=RW-data+ZI-data

flash=Code+RO-data+RW-data

我们在挑选单片机芯片的时候,RAM和flash要根据实际项目大于上面算出的容量,才能确保我们的项目能够正常运行。

相关推荐
武汉唯众智创33 分钟前
高职物联网应用技术专业实训室怎么建?嵌入式开发实训室建设方案详解
物联网·物联网实训室·物联网嵌入式实训室·物联网实训室解决方案
唔好理总之好犀利1 小时前
TVS管分析:MKS烧保险丝异常分析
stm32·单片机·嵌入式硬件
星恒讯工业路由器1 小时前
2G/3G网络退网趋势解读:对工业物联网设备的影响与应对策略
物联网·信息与通信·工业物联网·工业通信·5g redcap·2g3g退网·4g/5g升级
科莱特SAP2 小时前
精准匹配双向赋能:科莱特数智人才猎场重塑数字化人才服务模式
大数据·人工智能·物联网·人力资源·科莱特·科莱特人才服务
延凡科技11 小时前
工业锅炉智慧云管控平台解决方案|物联网远程监测、智能预警与能耗优化
物联网·远程控制·工业物联网·设备运维·智慧锅炉
芯片设计-曾工11 小时前
当精准脉冲遇上清晰视界——CH2205E模块与YL1621的“黄金搭档“
驱动开发·stm32·单片机·51单片机·硬件工程
数字新视界15 小时前
IT资产管理系统推动智能化运维与资源更优化管理
物联网·机房管理·蓄电池·动力与环境监控系统·机房动力环境监控
LCG元17 小时前
STM32 硬件 SPI + DMA 驱动 OLED 显示屏(SSD1306):从原理到 112fps 高速刷新全流程
stm32·单片机·嵌入式硬件
天吾cc18 小时前
RTT-ADC
单片机·嵌入式硬件·学习
qq_4480111618 小时前
C语言中的野指针和空指针
c语言·开发语言·单片机