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

news2024/10/6 0:29:45

嵌入式杂记 - 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中。
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023.12.7 关于 MySQL 事务详解

目录 事务的四大特性 原子性 一致性 持久性 隔离性 事务并发执行 脏读 不可重复读 幻读 四个隔离级别 read uncommitted read committed repeatable read serializable 事务的四大特性 原子性 一个事务中的所有操作,要么全部完成,要么全部…

2.修改列名与列的数据类型

修改字段名与字段数据类型 1.修改字段名 有时,在我们建好一张表后会突然发现,哎呀!字段名貌似写错了!怎么办?要删了表再重新建一个新表吗?还是要删了这个字段再新建一个新的字段? 都不用&…

【开源】基于JAVA的校园疫情防控管理系统

项目编号: S 037 ,文末获取源码。 \color{red}{项目编号:S037,文末获取源码。} 项目编号:S037,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 学生2.2 老师2.3 学校管理部门 三、…

proftpd安全加固:限制用户FTP登录

其实无所谓安全加固,因为proftp默认就是限制用户FTP登录的,这里有点凌乱得研究和实验了proftpd如何进行限制的,以及可能的放开限制。懂了这些才能更好的进行防护配置。 RootLogin指令其实主要作用就是启用ROOT访问。通常,proftpd在…

官方版小白重装系统之制作装机U盘篇

一、前言 很多人会安装电脑的操作系统,也有很多人不会安装,甚至还要花时间花金钱找人安装。 网上重装系统的网站很多,安装系统的工具软件也很多,其中不乏捆绑有病毒木马、广告间谍的,很多人深受其害,那为什…

聚类分析 | Matlab实现基于谱聚类(Spectral Cluster)的数据聚类可视化

聚类分析 | Matlab实现基于谱聚类(Spectral Cluster)的数据聚类可视化 目录 聚类分析 | Matlab实现基于谱聚类(Spectral Cluster)的数据聚类可视化效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现基于谱聚类(Spectral Cluster)的聚类算法可视化(完…

论文阅读《Learning Adaptive Dense Event Stereo from the Image Domain》

论文地址:https://openaccess.thecvf.com/content/CVPR2023/html/Cho_Learning_Adaptive_Dense_Event_Stereo_From_the_Image_Domain_CVPR_2023_paper.html 概述 事件相机在低光照条件下可以稳定工作,然而,基于事件相机的立体方法在域迁移时性…

Redis KEY*模糊查询导致速度慢、阻塞其他 Redis 操作

Redis KEY*模糊查询导致交互速度慢、阻塞其他 Redis 操作 查询速度慢的原因 在Redis中,使用通配符 KEYS 命令进行键的模糊匹配(比如 KEYS key*)可能会导致性能问题,尤其是在数据集较大时。这是因为 KEYS 命令的实现需要遍历所有…

盘古信息牵手时信集团,IMS-MOM护航制造企业海外工厂高效管理

在当前全球化经济背景下,制造企业海外工厂布局的趋势日益凸显。布局全球多工厂制造基地在管理方面需要直面多方面的挑战,包含复杂的全球供应链管理、跨地域资源协同合作、远程监测运营等等。在这种背景下,数字化智能制造系统被业内广泛应用&a…

多段图问题-动态规划解法

一、多段图问题 问题描述:设图G(V, E)是一个带权有向图,如果把顶点集合V划分成k个互不相交的子集Vi (2≤k≤n, 1≤i≤k),使得对于E中的任何一条边(u, v),必有u∈Vi,v∈Vim (1≤i≤k, 1<im≤k),…

因小失大,一个普通的postman多接口顺序执行,让项目瘫痪了一天

Runner的使用 postman不仅可以单独运行某个接口,postman的 Runner模块可以运行多个接口,可以实现真正意义上的自动化接口测试 Runner的主要功能如下 按顺序调用接口,执行用例; 批量发送请求; 对接口数据进行参数化…

Termux+Hexo结合内网穿透轻松实现安卓手机搭建博客网站发布公网访问

文章目录 前言 1.安装 Hexo2.安装cpolar3.远程访问4.固定公网地址 前言 Hexo 是一个用 Nodejs 编写的快速、简洁且高效的博客框架。Hexo 使用 Markdown 解析文章,在几秒内,即可利用靓丽的主题生成静态网页。 下面介绍在Termux中安装个人hexo博客并结合…

C++STL的string模拟实现

文章目录 前言string的成员变量成员函数构造函数拷贝构造赋值重载 模拟实现string各种接口print迭代器普通迭代器const迭代器 string比较大小push_backinsert 和 eraseinserterase reserve和resizereserveresize swapfindcout和cincoutcin 前言 今天要讲string的底层实现&…

c语言实例:计算并输出一个整数数组的平均值

大家好,今天给大家介绍一个c语言实例:计算并输出一个整数数组的平均值,文章末尾附有分享大家一个资料包,差不多150多G。里面学习内容、面经、项目都比较新也比较全!可进群免费领取。 以下是一个使用C语言实现的实例&am…

SMART PLC系统时间功能块

有时需要进行和系统时间相关的一些控制应用,所以PLC的系统时间对于此时的工程应用显得尤为重要。下面我们介绍系统时间功能块,这里的功能块我们可以对系统时间进行读取,还可以对系统时间进行修改。 1、系统时间 2、修改系统时间 功能块利用指针和指针运算完成系统时间读取和…

探索鸿蒙 TextInput组件

TextInput 根据组件名字,可以得知他是一个文本输出框。 声明代码👇 TextInput({placeholder?:ResourceStr,text?:ResourceStr}); placeholder: 就是提示文本,跟网页开发中的placeholder一样的 text:输入框当前的文本内容 特殊属…

人工智能从 DeepMind 到 ChatGPT ,从 2012 - 2024

本心、输入输出、结果 文章目录 人工智能从 DeepMind 到 ChatGPT ,从 2012 - 2024前言2010年:DeepMind诞生2012~2013年:谷歌重视AI发展,“拿下”Hinton2013~2014年:谷歌收购DeepMind2013年&…

Linux常用命令——arpwatch命令

在线Linux命令查询工具 arpwatch 监听网络上ARP的记录 补充说明 arpwatch命令用来监听网络上arp的记录。 语法 arpwatch(选项)选项 -d&#xff1a;启动排错模式&#xff1b; -f<记录文件>&#xff1a;设置存储ARP记录的文件&#xff0c;预设为/var/arpwatch/arp.d…

IOday6作业

1>使用有名管道&#xff0c;完成两个进程的相互通信 //create.c #include<myhead.h>int main(int argc, const char *argv[]) {if((mkfifo("myfifo1",0664)) -1){perror("mkfifo");return -1;}if((mkfifo("myfifo2",0664)) -1){perror…

MySQL 教程 2.1

MySQL 插入数据 MySQL 表中使用 INSERT INTO 语句来插入数据。 你可以通过 mysql> 命令提示窗口中向数据表中插入数据&#xff0c;或者通过PHP脚本来插入数据。 语法 以下为向MySQL数据表插入数据通用的 INSERT INTO SQL语法&#xff1a; INSERT INTO table_name (colu…