理解Keil编译器中编译程序时出现的Code、RO-data、RW-data和ZI-data的含义

这篇具有很好参考价值的文章主要介绍了理解Keil编译器中编译程序时出现的Code、RO-data、RW-data和ZI-data的含义。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

**

1:Code、RO-data、RW-data和ZI-data

**
STM32单片机在keil开发环境下编译完成后,会显示:
Program Size: Code=xxxx RO-data=xxxx RW-data=xxxx ZI-data=xxxx

编译后的显示窗口如图所示:
keil编译结果中data和code,MDK 5 (Keil uVision5),单片机,STM32,单片机,stm32
其中Code、RO-data、RW-data和ZI-data是什么意思呢?

Code:代表执行的代码,程序中所有的函数;

RO-data:代表只读数据(Read Only Data),程序中所定义的全局常量数据;

RW-data:代表已初始化的读写数据(Read And Write Data),程序中定义并且初始化的全局变量和静态变量;

ZI-data:代表定义了但未初始化的可读写数据,ZI英语是zero initial,就是程序中用到的并且被系统初始化为0的变量 的字节数,keil编译器默认是把你没有初始化的变量都赋值一个0,这些变量在程序运行时是保存在RAM中的。

或者我们还可以分析一下.map文件
.map文件位于生成工程中的Listings文件夹下,(工程名.map文件是编译工程产生文件,可以通过设置工程将文件保存到其他目录去,默认在Listings文件夹中,或者OBJ文件夹下)打开可以看到如图的显示内容(在文件最底部):
keil编译结果中data和code,MDK 5 (Keil uVision5),单片机,STM32,单片机,stm32

可看到KEIL编译后显示的是图中Grand Totals/ELFImage Totals,而实际存储在ROM中的数据并不包含ZI Data(因为ZI Data未初始化,对于MDK并不需要单独提供地址保存其初始化数据)。

  1. 程序编译后的HEX文件大小 = Total ROM Size的值 =(Code + RO Data + RW Data);图2中显示表示编译后HEX文件大小454.82KB,这个就是实际烧录到单片机Flash里面的程序文件大小。单片机选型时要注意单片机的Flash容量。

  2. 程序实际在单片机RAM中运行的数据大小 = Total RW Size的值 =(RW Data + ZI Data);
    总之,只有单片机的实际Flash容量大于等于程序编译后的Total ROM Size值,且单片机的实际RAM容量大于等于编译后的Total RW Size值,程序才能在单片机中正常运行。文章来源地址https://www.toymoban.com/news/detail-594275.html

到了这里,关于理解Keil编译器中编译程序时出现的Code、RO-data、RW-data和ZI-data的含义的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • vscode开发c++ 程序,配置使用微软自家的cl编译器。

    vscode 写c++代码, 配置为使用微软自己的cl编译器: 1.安装visual studio 2022, 并且创建一个可以正常编译的cpp工程。 2. 从visual studio 2022的菜单 项目 属性,查出include和lib的配置信息,并录入到window的系统环境变量中,当然还要把cl可执行文件的路径也录入到window11系统PATH中,如下

    2024年03月19日
    浏览(52)
  • 【JavaScript】JavaScript 简介 ④ ( 解释型语言 和 编译型语言 | 计算机程序本质 | 编译器 和 解释器 )

    计算机 的 程序 是在 CPU 上执行的 , CPU 上执行的只有匹配该 CPU 的机器码指令 , 不同类型的 CPU 执行的 机器码指令 格式不同 , X86 和 ARM 执行的 机器码 指令格式是不同的 ; 机器码指令 是 二进制的 , 所有在 计算机 上执行的程序 , 都是 若干 二进制机器码 的集合 ; 计算机 只能执

    2024年03月22日
    浏览(34)
  • windows下使用microsoft、intel、gnu不同编译器利用cmake和vscode对c++和fortran程序进行编译和调试

    由于编译器支持特性、编译后程序运行速度、安装使用便捷程度等的不同,我们往往会安装多种不同的编译器。对于c++语言主要的编译器有:microsoft、intel、gnu等,对于fortran语言则更多,包括gnu、intel、pgi等等。不同的编译器在一个系统下,往往需要利用一些手段进行区分,

    2024年02月05日
    浏览(46)
  • C/C++编译器全局优化技术:全局优化是针对整个程序进行的优化,包括函数之间的优化

    编程语言的设计和实现与人类心理学有着密切的联系。C++编译器全局优化技术在这个领域中是一个重要的例子。在这篇博客中,我们将从心理学的角度来探讨C++编译器全局优化技术的原理和实践。 人类大脑的神经网络在处理信息时,会自动进行优化以提高效率。我们的思维和

    2023年04月26日
    浏览(65)
  • Linux C++性能优化秘籍:从编译器到代码,探究高性能C++程序的实现之道

    随着大数据、人工智能等技术的飞速发展,程序性能优化的重要性愈发突出。优化性能可以降低资源消耗、提高系统响应速度,从而在有限的硬件资源下,实现更高的吞吐量和处理能力。此外,性能优化也有助于降低能耗、减少散热问题,延长硬件使用寿命。 Linux操作系统具

    2023年04月09日
    浏览(36)
  • C/C++编译器内存优化技术:内存优化关注程序对内存的访问和使用,以提高内存访问速度和减少内存占用。

    在日常生活中,我们常常会为了提高效率、节省资源而进行各种优化。而在计算机领域,优化是至关重要的一环,尤其是当涉及到编程语言和编译器时。本文将从心理学的角度,带您领略C++编译器内存优化技术的奥秘,并引导您深入学习这一技术。 正如心理学家所研究的,人

    2023年04月22日
    浏览(52)
  • Visual Studio编译器编译时出现“请选择有效启动项”问题的解决办法

    使用visual studio打开的是一个文件夹并不是一个项目,找不到启动项是正常的。 我们使用visual studio从现有代码创建项目即可。 上面如果默认创建Windows应用程序项目运行项目时就可能会出现 错误 LNK2019 无法解析的外部符号 _WinMain@16,函数 \\\"int __cdecl invoke_main(void)\\\" (?invoke_main@@

    2024年02月11日
    浏览(88)
  • KEIL5 各个版本编译器的下载

    关于下载了新版本KEIL之后,编译器版本不对导致以前的程序不能运行,有许多问题需要解决,其中编译器版本问题是个不能避免的问题; 我之前用的是V5.06 update 7(build 906)版的编译器,后来升级MDK537之后,编译器版本就变成V6.16了,因为我是卸载删除之后再升级的MDK,所以之

    2024年02月02日
    浏览(37)
  • KEIL MDK arm编译器 添加教程

    1.下载编译器安装文件 arm编译器6.16(适用于windows 64位)安装文件可在如下网址免费下载: arm编译器6.16(适用于Windows64位)-嵌入式文档类资源-CSDN文库 https://download.csdn.net/download/WG_IECAS/87342708 如需其他版本编译器,可到KEIL官网查找下载,快速网址: Arm Compiler downloads index h

    2023年04月08日
    浏览(42)
  • Keil MDK安装armcc V5编译器

            不知道从什么时候开始,Keil MDK默认不支持V5的编译器了,里面默认只有V6的编译器,设置界面跟V5有很大的差异不太熟悉。最可怕的是,之前使用V5编译的工程,换成V6编译器后居然报错...虽然修改一下应该也可以正常编译,但,人总是习惯自己熟悉的东西。所以,

    2024年04月27日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包