1. 查看码Flash/内存RAM占用大小

工程编译后,双击上图中红框位置,会打开 .map文件,包含了各个函数和文件占用的空间大小和地址。

2. Code-Data,RO-Data,RW-Data,ZI-Data 分别是什么含义

Code-Data:代码占用的空间大小(占用的空间为内部Flash)

RO-Data:只读常量大小(const常量,#define宏常量。一般用于不需要更改的数据)

RW-Data:初始化了的变量大小

ZI-Data:没有初始化的变量

工程总计占用的 Flash大小:Total ROM Size (Code + RO Data + RW Data)

工程总计占用的 RAM大小:Total RW  Size (RW Data + ZI Data)

编译器显示的单位是 Byte字节

3. 单片机中的Flash是干什么的?以及为什么占用Flash的大小为 Code + RO Data + RW Data

Tips:单片机与电脑/linux嵌入式 在代码运行的空间上不同。大多数单片机,代码都是在Flash中运行的。而电脑/linux嵌入式,是将代码从存储介质(可能是硬盘/SD卡/EMMC/NAND)中读出,拷贝到RAM,再在RAM中去执行代码。

因为单片机的运行速度一般都比较慢,Flash的读取速度足够跟得上代码运行的速度。并且在单片机内部都会有Flash预读操作,相当于提前读取Flash代码段放入缓存,CPU运行代码时直接从缓存中读,不需要等待Flash读取完成,从而加快单片机的读取和运行速度。代码在Flash中运行,这样做的好处是可以减少RAM的占用,减少生产的硬件成本。

而电脑/linux嵌入式则不一样,运行速度较为迅速,Flash的读取速度远远跟不上代码运行的速度,如果这时还在Flash中运行代码,则会严重影响代码的执行速度。所以要先将代码从存储介质(可能是硬盘/SD卡/EMMC/NAND)中读出,拷贝到RAM,在RAM中去执行代码。

特别注意:并非所有的单片机都是在Flash中运行代码,像stm32H7系列、NXP 的i.MX RT系列 就是代码在RAM中运行的。这类MCU的特点是运行速度非常快,远超一般单片机。它们内部Flash更像 Cortex-A嵌入式处理器中的 BootROM,内置Flash很小,几乎都是用来执行出厂配置代码的,用户很少用,都是将代码存放于外置的Flsh中。

还有一种情况,就是系统比较复杂的情况,也需要将代码运行于RAM上。用户可自行将代码拷贝到RAM中运行,并用函数指针去调用RAM中的注册函数。

4. 常用单片机的 Flash/RAM 空间大小

常用STM32单片机的 Flash/RAM 空间大小
型号

Flash Size

RAM Size
STM32F030f4p6 16KBytes 4KBytes
STM32F030c8t6 64KBytes 8KBytes
STM32F030rct6 256KBytes 32KBytes
STM32F103c8t6 64KBytes 20KBytes
STM32F103rct6 256KBytes 48KBytes
STM32F103zet6 512KBytes 64KBytes
STM32F407vet6 512KBytes 192KBytes
STM32F407zet6 512KBytes 192KBytes
STM32F407zgt6 1024KBytes 192KBytes

相关链接:为什么单片机的代码在Flash中运行,单片机的代码运行位置跟电脑有什么不同?

Code、 RO-data=、 RW-data、ZI-data、相关推荐

  1. KEIL 中的RO、RW和ZI DATA所代表的意思

    RO段.RW段和ZI段 要了解RO,RW和ZI需要首先了解以下知识: ARM程序的组成             此处所说的"ARM程序"是指在ARM系统中正在执行的程序,而非保存在 ...

  2. ARM编译中的RO、RW和ZI DATA区段

    ARM编译中的RO.RW和ZI DATA区段 ARM编译中的RO.RW和ZI DATA区段 ARM程序(指在ARM系统中正在执行的程序,而非保存在ROM中的bin文件)的组成 一个ARM程序包含3部分 ...

  3. RO段、RW段和ZI段 --Image$$??$$Limit 含义

    要了解RO,RW和ZI需要首先了解以下知识: (1) ARM程序的组成             此处所说的"ARM程序"是指在ARM系统中正在执行的程序,而非保存在ROM中的bin ...

  4. linux硬盘ro改为rw,RO,RW,ZI 和scatter file详解(转载)

    要了解RO,RW和ZI需要首先了解以下知识: (1) ARM程序的组成 此处所说的"ARM程序"是指在 ARM系统中正在执行的程序,而非保存在ROM中的bin映像(image)文件 ...

  5. ARM中的RO、RW和ZI DATA

    一直以来对于ARM体系中所描述的RO,RW和ZI数据存在似是而非的理解,这段时间对其仔细了解了一番,发现了一些规律,理解了一些以前书本上有的但是不理解的东西,我想应该有不少人也有和我同样的困惑,因此将 ...

  6. stm32 ARM中的RO、RW和ZI DATA

    一直以来对于ARM体系中所描述的RO,RW和ZI数据存在似是而非的理解,这段时间对其仔细了解了一番,发现了一些规律,理解了一些以前书本上有的但是不理解的东西,我想应该有不少人也有和我同样的困惑,因此将 ...

  7. RO段、RW段和ZI段 转载:RO段、RW段和ZI段

    RO段.RW段和ZI段 转载:RO段.RW段和ZI段 2009-04-02 15:23 原帖地址 Posted by gavinkwoe 一直以来对于ARM体系中所描述的RO,RW和ZI数据存在似是而 ...

  8. RO段、RW段和ZI段

    RO段.RW段和ZI段 RO段.RW段和ZI段 Posted by gavinkwoe 一直以来对于ARM体系中所描述的RO,RW和ZI数据存在似是而非的理解,这段时间对其仔细了解了一番,发现了一些规 ...

  9. python可视化多个机器学习模型在独立测试集(test data set)上面的AUC值、可视化模型效能

    python可视化多个机器学习模型在独立测试集(test data set)上面的AUC值.可视化模型效能 # x_lables为模型名称列表,包括,逻辑回归.朴素贝叶斯.支持向量机.随机森林.xgb ...

  10. ARM中的RO段、RW段和ZI段的区别

    1 前言 一直以来对于ARM体系中所描述的RO,RW和ZI数据存在似是而非的理解,这段时间对其仔细了解了一番,发现了一些规律,理解了一些以前书本上有的但是不理解的东西,我想应该有不少人也有和我同样的困 ...

最新文章

  1. dojo 学习笔记之dojo.query - query(id) 与query(class)的差别
  2. 自己对Delphi中使用正则表达式的研究心得
  3. ios 打开评论界面
  4. 【LeetCode】LeetCode之乘积为正数的最长子数组长度——暴力枚举+动态规划+Kadane算法
  5. Redis—主从复制
  6. 典型医学设计实验GEO数据分析 (step-by-step) - 数据获取到标准化
  7. (8)Node.js 模块介绍
  8. mac下使用mysql
  9. Java实现MongoDB的日期(Date)分组功能
  10. matlab2c使用c++实现matlab函数系列教程- poly函数
  11. 交通信息工程 实验四:交通仿真实验(一)
  12. 20135202闫佳歆——信息安全系统设计基础第五周学习总结
  13. 教师资格证面试缴费找不到服务器,2016年教师资格证考试报名网上缴费常见问题...
  14. 首款搭载HarmonyOS,分布式“智慧眼”!华为智选首款搭载HarmonyOS的智能摄像头正式发布...
  15. 复化梯形公式c语言实验,实验4_数值积分与数值微分(完成版).doc
  16. 手机基站伪装潜伏引强烈关注
  17. 二次型(Quadratic Form)
  18. 三星认为 LG 零售店销售苹果 iPhone 违约:也应该销售 Galaxy 手机
  19. CVPR2019目标检测汇总
  20. Java毕设项目大学生租房平台(java+VUE+Mybatis+Maven+Mysql)

热门文章

  1. Sun Solaris系统管理命令简介
  2. Mac安装MPV播放器
  3. “Hacker_R_US”因炸弹威胁和DDoS勒索被判8年监禁
  4. 【VBA研究】用Ping命令测试IP地址是否通达
  5. 网页常用字体(CSS样式)记录:
  6. wordpress友联_WordPress如何添加友情链接
  7. wordpress友联_为你的wordpress添加独立的友情链接页面吧
  8. 5g的八大关键指标_5G的七大关键性能指标5G对生活的改变新5G时代的来临身边巨变...
  9. 1命名规则 sentinel_sentinel1 GRD数据和SLC数据预处理有什么区别吗?预处理流程是怎样的?...
  10. linux 删除所有a字符串,linux文本处理三剑客(grep、sed、akw)命令选项整理