嵌入式杂记 - MDK的Code, RO-data , RW-data, ZI-data意思

嵌入式杂记 - Keil的Code, RO-data , RW-data, ZI-data意思

  • MDK中的数据分类
  • MCU中的内部存储分布
  • MDK中数据类型存储
    • Code代码段
      • 例子
    • RO-data 只读数据段
      • 例子
    • RW-data 可读写数据段
      • 例子
    • ZI-data 清零数据段
      • 例子

在嵌入式开发中,我们经常都会使用一些IDE,例如 MDKIAR。在这些IDE编译完成之后,通常会在编译界面中会出现如下的数据,很多初学者会对这些数据不太熟悉,本篇文章就以 MDK为例简单介绍一下这几个数据的意思,IAR也是类似。

在这里插入图片描述

MDK中的数据分类

  • Code:意思为工程中可执行的代码容量,通常为工程中所有被调用的函数的容量。
  • RO-data:意思为工程中的只读数据容量,通常为工程中被调用的全局常量数据和全局常量字符串的容量。
  • RW-data:意思为工程中的已初始化的全局数据(初始值不为0)容量,通常为工程中被调用的全局初始化数据和静态全局初始化数据的容量。
  • ZI-data:意思为工程中的未初始化的全局数据(或初始值为0)容量,通常为工程中被调用的全局未初始化数据和静态全局未初始化数据的容量。

MCU中的内部存储分布

在一个MCU中,其内部存储通常会分成两部分,一个是FLASH,另一个是RAM。其中FLASH的特点是存储的数据不易丢失,即使系统掉电数据也不会丢失,而RAM的特点是数据掉电就会丢失。通常一个MCU的FLASH和RAM大小会在数据手册中进行说明
在这里插入图片描述

在这里插入图片描述

从数据手册中可以看到,STM32F40X的SRAM理论上有192KB的FLASH可用,但实际只有128KB。而FLASH则有1MB的容量可以使用。
在MDK中我们也需要设置FLASH和SRAM的容量大小。
在这里插入图片描述

MDK中数据类型存储

Code代码段

MDK中的Code代码段指的是工程中所有被调用的函数容量。Code代码段是存储在MCU中的FLASH

例子

在这里插入图片描述
在工程中我们定义了一个add函数,但是没有被调用,此时编译工程,Code代码段的容量为2960字节。
在这里插入图片描述
当我们调用add函数时,再重新编译工程,此时Code代码段大小变成了2972字节。Code代码段大小增加了。我们也可以打开工程的map文件,map文件中记录的工程中的函数和数据的存储位置。可以看到add函数被放到了0x08000227这个地址,这个地址也正是FLASH中的地址,说明函数是被放到FLASH中。
在这里插入图片描述

RO-data 只读数据段

MDK中的RO-data只读数据是指的是工程中所有被调用的全局常量数据和全局常量字符串数据的容量。RO-data只读数据是存储在MCU中的FLASH

例子

在这里插入图片描述

当我们调用两个全局常量数据时,再重新编译工程,此时RO-data数据的大小变成了4436字节。我们也可以打开工程的map文件,可以看到g_test_data被放到了0x08000d3c这个地址,g_test_str被放到了0x08001cdc这个地址,这两个地址是FLASH中的地址,说明数据是被放到FLASH中。
在这里插入图片描述
在这里插入图片描述

RW-data 可读写数据段

MDK中的RW-data可读写是指的是工程中所有被调用的已经初始且初始化不为0的全局数据的容量。RO-data只读数据是存储在MCU中的RAM中。

例子

在这里插入图片描述

在工程中我们定义了一个4000字节的全局数组并初始化不为0,但是没有被调用,此时编译工程,RW-data数据的容量为40字节。
在这里插入图片描述
当我们调用全局数据时,再重新编译工程,此时RW-data数据的大小变成了4040字节。我们也可以打开工程的map文件,可以看到g_test_data被放到了0x20000000这个地址,这个地址是RAM中的地址,说明数据是被放到RAM中。
在这里插入图片描述

ZI-data 清零数据段

MDK中的ZI-data数据是指的是工程中所有被调用的不初始或初始化为0的全局数据的容量。ZI-data只读数据是存储在MCU中的RAM

例子

在这里插入图片描述

在工程中我们定义了一个4000字节的全局数组不初始化,但是没有被调用,此时编译工程,ZI-data数据的容量为1632字节。

在这里插入图片描述
当我们调用全局数据时,再重新编译工程,此时ZI-data数据的大小变成了5632字节。我们也可以打开工程的map文件,可以看到g_test_data被放到了0x20000028这个地址,这个地址是RAM中的地址,说明数据是被放到RAM中。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/229257.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

《一念关山》热度破万,爱奇艺古装赛道出尽风头

​刘诗诗重回古装剧、新式武侠公路片、质感细腻的镜头美学......看点满满的《一念关山》频频登上热搜,俘获了大批观众的心。 开播首日热度就刷新了爱奇艺2023年站内纪录,《一念关山》作为2023年爱奇艺在古装赛道的收官之作,口碑和热度兼收。…

理解 GET、POST、PATCH 和 DELETE 请求的参数传递方式

理解 GET、POST、PATCH 和 DELETE 请求的参数传递方式 本文将向您介绍在使用 GET、POST、PATCH 和 DELETE 请求时如何传递参数。通过详细解释每种请求的参数传递方式和示例代码,您将了解如何正确地将数据发送到服务器并与之交互。 GET 请求的参数传递方式 在 GET…

0012Java程序设计-ssm医院预约挂号及排队叫号系统

文章目录 **摘** **要**目 录系统实现5.2后端功能模块5.2.1管理员功能模块5.2.2医生功能模块 开发环境 摘 要 网络的广泛应用给生活带来了十分的便利。所以把医院预约挂号及排队叫号管理与现在网络相结合,利用java技术建设医院预约挂号及排队叫号系统,实…

【LeetCode】692. 前K个高频单词

692. 前K个高频单词 描述示例解题思路及事项思路一思路二 描述 给定一个单词列表 words 和一个整数 k ,返回前 k 个出现次数最多的单词。 返回的答案应该按单词出现频率由高到低排序。如果不同的单词有相同出现频率, 按字典顺序 排序 示例 示例1 输…

【Java 基础】25 比较器

文章目录 1.什么是比较器2.比较器的种类1)Comparable2)Comparator4)组合比较器 总结 1.什么是比较器 比较器是用于对对象进行比较的工具 比较器允许开发者定义对象之间的顺序,使得排序和比较操作更加灵活。 还记得我们之前学的数…

如何为游戏角色3D模型设置纹理贴图

在线工具推荐: 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 当谈到游戏角色的3D模型风格时,有几种不同的风格&#xf…

Hugging Face 给普通用户提供了一个 2 vCPU 16GB 的免费空间

Hugging Face 给普通用户提供了一个 2 vCPU 16GB 的免费空间,并且支持部署 Gradio 构建的应用程序,非常方便,下面我们进入 https://huggingface.co/spaces/ ,点击创建空间。

HbuilderX使用Uniapp+Vue3安装uview-plus

如果你是vue2版本想使用uniapp去配置uviewui库可以参考之前的文章 小程序的第三方ui库推荐较多的还是uview的,看起来比较美观,功能也比较完善,下面将提一下Vue3安装uview-plus库的教程 创建项目 安装 首先进入官网 uView-Plus 直接下载并导…

Linux驱动开发一

一、Linux驱动开发与裸机开发的区别 1、开发思维区别 裸机驱动: (1)底层,跟寄存器打交道,有些MCU提供了库 Linux驱动: (1)Linux下驱动开发直接操作寄存器不现实 (2…

LeetCode题:174. 地下城游戏

目录 一、题目要求 二、解题思路 (1)状态表示 (2)状态转移方程 (3)初始化dp表 (4)填表顺序 (5)返回值 三、代码 一、题目要求 174. 地下城游戏 恶魔们…

这是最后的战役了

不变因子 初等因子 行列式因子 smith标准型 酉矩阵 H-阵等等 A H A A^H A AHA 就是 H-阵 正定H阵的性质 若 A A A 为正定的H-阵. 存在可逆矩阵 Q Q Q, 使得 A Q H Q AQ^H Q AQHQ.存在 P P P, 使得 P H A P I P^HAPI PHAPI.A的特征值大于0. Q − 1 A Q Q^{…

根据java类名找出当前是哪个Excel中的sheet

pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 …

word一键接受所有修订并保留修订痕迹

目的&#xff1a;让word修订插入的内容在接受修订后保留痕迹。 文章目录 目的&#xff1a;让word修订插入的内容在接受修订后保留痕迹。1. 打开批注的word文件2. 同时按住&#xff1a;*AltF11*&#xff0c;然后右键&#xff1a;Normal -->插入--> 模块3. 在出现的代码框中…

模块式雨水调蓄池由若干个模块组合成一个水池使用寿命达70年以上

模块式雨水调蓄池是一种先进的雨水收集和利用系统&#xff0c;它由若干个模块组合而成&#xff0c;每个模块都具有一定的储水能力和调蓄功能。这种调蓄池具有使用寿命长、适应性强、综合成本低等优点&#xff0c;因此在城市雨水管理和水资源利用方面具有广泛的应用前景。 模块…

CentOS服务自启权威指南:手动启动变为开机自启动(以Jenkins服务为例)

前言 CentOS系统提供了多种配置服务开机自启动的方式。本文将介绍其中两种常见的方式&#xff0c; 一种是使用Systemd服务管理器配置&#xff0c;不过&#xff0c;在实际中&#xff0c;如果你已经通过包管理工具安装的&#xff0c;那么服务通常已经被配置为Systemd服务&#…

积累这 4 种资源才是你的个人竞争力

在我们离开校园&#xff0c;踏入职场之后&#xff0c;总是会听到这样的论调&#xff1a;我们需要不断成长&#xff0c;提升自己的个人核心竞争力&#xff0c;才能在这个残酷的社会中混下去&#xff0c;混得更好。 那到底什么是个人核心竞争力呢&#xff1f;关于这个问题的答案…

【算法题】找出符合要求的字符串子串(js)

题解&#xff1a; function solution(str1, str2) {const set1 new Set([...str1]);const set2 new Set([...str2]);return [...set1].filter((item) > set2.has(item)).sort();}console.log(solution("fach", "bbaaccedfg"));//输入:fach// bbaacced…

JAVA使用POI向doc加入图片

JAVA使用POI向doc加入图片 前言 刚来一个需求需要导出一个word文档&#xff0c;文档内是系统某个界面的各种数据图表&#xff0c;以图片的方式插入后导出。一番查阅资料于是乎着手开始编写简化demo,有关参考poi的文档查阅 Apache POI Word(docx) 入门示例教程 网上大多数是XXX…

Swing程序设计(9)复选框,下拉框

文章目录 前言一、复选框二、下拉框总结 前言 该篇文章简单介绍了Java中Swing组件里的复选框组件、列表框组件、下拉框组件&#xff0c;这些在系统中都是常用的组件。 一、复选框 复选框&#xff08;JCheckBox&#xff09;在Swing组件中的使用也非常广泛&#xff0c;一个方形方…

Vulnhub-DC-9 靶机复现完整过程

一、搭建环境 kali的IP地址是&#xff1a;192.168.200.14 DC-9的IP地址暂时未知 二、信息收集 1、探索同网段下存活的主机 arp-scan -l #2、探索开放的端口 开启端口有&#xff1a;80和22端口 3、目录扫描 访问80 端口显示的主页面 分别点击其他几个页面 可以看到是用户…