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

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

时间:2024-08-27 21:21:41浏览次数:8  
标签:RW SRAM Flash Code xxx RO data

        之前在裸机跑一些简单的项目内存完全够用,就不会涉及到内存方面的问题。最近在学 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)中。

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

        综上所述,在编译成功后下面出现的信息 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,显然内存够用。

 

标签:RW,SRAM,Flash,Code,xxx,RO,data
From: https://blog.csdn.net/m0_74800695/article/details/141611423

相关文章

  • Datawhale X 李宏毅苹果书(进阶) AI夏令营 task01笔记
    官方学习文档:https://linklearner.com/activity/16/14/42目录深度学习基础局部极小值与鞍点临界点及其种类判断临界值种类的方法逃离鞍点的方法批量和动量批量大小对梯度下降法的影响大的批量跟小的批量的对比        动量法深度学习基础       ......
  • AI创新,DataOps聚能 | 白鲸开源DTCC共话DataOps新篇章
    近日,由IT168联合旗下ITPUB、ChinaUnix两大技术社区主办的第15届中国数据库技术大会(DTCC2024)隆重召开。大会以“自研创新数智未来”为主题,吸引了数百位行业专家和广大数据领域从业者共聚这场年度数据库技术交流盛宴,共同探讨新时代下数据库的技术动态和应用实践。作为全球领先......
  • Datawhale X 李宏毅苹果书 AI夏令营 深度学习方向 task 1 笔记
    一、机器学习机器学习(MachineLearning,ML):机器具备找函数的能力。当我们对机器输入一个任务时(如:语音识别和图像识别),机器要做的就是找出这些任务蕴含的函数,通过找到函数,机器就可以通过输入的内容给出对应的输出内容。而找函数人类是很难做到的,所以这时候就需要机器学习。机器学......
  • SwiftData 如何在 Widgets 和 App 的界面之间同步数据变化?
    概述从iOS17(watchOS11)开始,苹果推出了可交互小组件(InteractiveWidgets),使用它我们终于能在Widgets中添加按钮或Toggle来直接驱动数据的变化了。但是被Widgets修改的数据如何及时的同步到对应App的界面中呢?在本篇博文中,您将学到如下内容:概述1.打造Widg......
  • 长期埋设,准确测量!GEORMxxxx振弦式钢筋计为岩土工程提供可靠的应力监测
    长期埋设,准确测量!GEORMxxxx振弦式钢筋计为岩土工程提供可靠的应力监测GEORMxxxx型钢筋计,能够同步监测混凝土结构内部的温度,而无需进行温度修正。其量程更大,可达到300MPa的拉压应力幅度。GEORMxxxx型钢筋计广泛适用于各类混凝土工程和深基坑开挖安全监测中,可测量混凝土内部的钢筋......
  • UDS 诊断 - WriteDataByIdentifier(按标识符写数据)(0x2E)服务
    UDS诊断服务系列文章目录诊断和通信管理功能单元UDS诊断-DiagnosticSessionControl(诊断会话控制)(0x10)服务UDS诊断-ECUReset(ECU重置)(0x11)服务UDS诊断-SecurityAccess(安全访问)(0x27)服务UDS诊断-CommunicationControl(通信控制)(0x28)服务UDS诊断-TesterPresent......
  • 微信小程序报 For developer:Two-way binding does not support complex data paths c
    微信小程序报:Fordeveloper:Two-waybindingdoesnotsupportcomplexdatapathscurrently.Thistwo-waybindingisignored.翻译过来是:对于开发人员:双向绑定目前不支持复杂的数据路径。这种双向绑定被忽略。原因:model:value不是能双向绑定子对象的值,如定义了data:......
  • Datawhale AI+X 深度学习入门(一)
    一.机器学习的定义和核心1.机器学习就是让机器具备找一个函数的能力。机器具备找函数的能力以后,它可以做很多事。2.在机器学习领域里面,除了回归跟分类以外,还有结构化学习(structuredlearning)。机器不只是要做选择题或输出一个数字,而是产生一个有结构的物体,比如让机器画一张图,写......
  • 【跨域问题解决】Access to XMLHttpRequest at xxx from origin xxx has been blocked
    这个错误是由于浏览器的同源策略(CORS,Cross-OriginResourceSharing)导致的。当从一个源(origin)向另一个源请求资源时,如果这两个源的协议、域名或端口号不同,就会触发CORS策略。解决方法要解决这个问题,你需要在你的后端服务中添加CORS支持,以便它允许来自你的请求。这通常......
  • Flink系列-SQL connector扩展以及DataGenTableSourceFactory源码走读
    一、说明    通常我们直接使用Flink的sql进行实时任务开发,经常会遇到扩展新的数据源端或者目标端的场景,或者需要了解connector的一些源码机制,方便开发和定位问题。    如何扩展新增Sqlconnector呢?扩展ApacheFlink的新SQLConnector主要涉及以下几个步骤:......