stm32f103c8t6 程序编译后的 Program Size: Code=xxx RO-data=xxx RW-data=xxx ZI-data=xxx 是什么

        之前在裸机跑一些简单的项目内存完全够用,就不会涉及到内存方面的问题。最近在学 FreeRTOS 时,将大容量的 stm32f103rct6 代码移植到 小容量的 stm32f103c8t6 上时,就遇到了内存不足的问题,所以才注意到这些东西。
        那么在我们编译后看到的这些东西到底代表着什么呢?在此之前我们先了解一下 FlashSRAM

一、认识 Flash 和 SRAM

        打开 stm32f103rct6 的手册我们可以看到这个东西:Flash = 256K; SRAM = 48K;

        在STM32微控制器中,Flash和SRAM是两种不同的存储器类型。

        Flash是一种非易失性存储器用于存储程序代码和只读数据。它具有较大的存储容量,可以保存微控制器的固件程序,包括操作系统、应用程序以及其他必要的程序代码。Flash存储器在断电后仍然可以保持数据内容,因此适用于存储长期不变的数据。

        SRAM是一种易失性存储器用于存储临时数据和变量。它具有较小的存储容量,但读写速度非常快。SRAM存储器通常用于存储程序运行时的变量、栈和堆等数据。与Flash不同,SRAM存储器在断电后会丢失数据,因此不适合存储长期使用的数据。

二、认识 Code、RO-data、RW-data、ZI-data

        在STM32微控制器中,CodeRO-dataRW-data  ZI-data 是不同类型的存储区域。

        1. Code(代码区):这个区域存储着程序的指令。这些指令一般是只读的,因此在运行时无法修改。它通常包含了程序的主要逻辑,例如函数、循环和条件语句等。Code区域通常是存储在闪存(Flash)中,可以通过编程器将程序代码烧录进去。

        2. RO-data(只读数据区):这个区域存储着程序的只读数据,例如常量、字符串和只读变量等。与Code区域类似,RO-data区域也是只读的,无法在运行时修改。RO-data区域通常也存储在闪存(Flash)中,与Code区域相邻

        3. RW-data(读写数据区):这个区域存储着程序的读写数据,例如全局变量和静态变量等。RW-data区域可在程序运行时进行读取和写入操作。RW-data区域通常存储在内部静态随机存储器(SRAM)中,有较快的读写速度

        4. ZI-data(零初始化数据区):这个区域存储着程序的未初始化的全局变量和静态变量等。ZI-data区域在程序开始执行之前会被自动初始化为零。与RW-data区域类似,ZI-data区域也存储在内部静态随机存储器(SRAM)中

2024 年 10 月 17 号更新

Code 区其实就是操作系统中的 .text 区

RO-data 区其实就是 .rodata

RW-data 区其实就是 .data

ZI-data 区其实就是 .bss

三、查看程序占用内存情况

        综上所述,在编译成功后下面出现的信息 Program Size: Code=42284 RO-data=2696 RW-data=4592 ZI-data=15480  代表了程序的各个模块实际占用内存的大小。如果要查看程序占用芯片 Flash 和 SRAM 的大小,可以通过下面两种方式:

        1、就是通过编译完成后下面的信息:

        Program Size: Code=42284 RO-data=2696 RW-data=4592 ZI-data=15480 

        Flash = Code + RO-data;

        SRAM = RW-data + ZI-data;

        2、可以通过查看map文件来得到程序占用内存的详细信息:

        如图双击项目文件 FreeRTOS 即可弹出 map 文件。

        在 map 文件中找到最底端的数据:

        其中 RO 表示程序占用 Flash 大小,RW 表示程序占用 SRAM 大小。因为 stm32f103c8t6 的参数 Flash = 64K; SRAM = 20K,显然内存够用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值