博客
关于我
MDK中的RW RO ZI ROM的含义
阅读量:87 次
发布时间:2019-02-26

本文共 932 字,大约阅读时间需要 3 分钟。

程序大小分析:ARM程序的代码与数据结构解析

在ARM开发中,理解程序大小与内存占用是优化和调试的重要环节。本文将详细解析ARM程序中的代码与数据结构,帮助开发者更好地理解程序运行机制。

程序运行时,芯片内部的存储空间主要由以下几个部分组成:

  • 代码空间(Code)

    存储到flash(ROM)中的程序代码,包括所有指令和函数。代码是程序的核心执行单元,直接影响程序的运行效率。

  • 只读数据(RO Data)

    包含常量和静态常量(const型),这些数据在编译时已被确定,且不会被修改。只读数据存储在ROM中,具有持久性。

  • 可读写数据(RW Data)

    这些变量在初始化时已赋值,程序运行时可读写。RW数据存储在RAM中,需注意其占用会影响系统性能。

  • 未初始化数据(Zero-Initialized Data,ZI Data)

    这些变量在编译时未被初始化,Keil编译器默认赋值为0。ZI数据存储在RAM中,程序运行时需通过特定指令清零。

  • 程序烧写时,flash中的占用空间为:代码空间 + 只读数据 + 可读写数据。

    程序运行时,RAM中的占用空间为:可读写数据 + 未初始化数据。

    以下是典型ARM程序的编译结果示例:

    • Code(代码):2730字节
    • RO Data(只读数据):194字节
    • RW Data(可读写数据):250字节
    • ZI Data(未初始化数据):8字节
    • 总计:2730 + 194 + 250 + 8 = 2980字节(约2.91KB)

    总ROM占用空间为:2730 + 194 + 250 = 2988字节(约2.92KB)。

    理解这些数据对优化程序性能至关重要。通过合理管理RW和ZI数据的使用,可以有效降低程序运行时的内存占用。

    需要注意的是,ZI数据通常不包含在ROM中,因为这些数据在程序启动时会被清零,包含ZI数据会增加无谓的存储开销。

    在程序设计中,应确保ROM中包含以下功能:

  • 将RW数据从ROM复制到RAM,确保变量能够正常使用。
  • 初始化ZI区域的RAM,通常采用清零方式。
  • 确保程序在启动时完成上述准备工作,否则变量访问将直接失败。
  • 通过合理规划代码、只读数据和可读写数据的使用,可以最大限度地优化程序的存储占用和运行效率。

    转载地址:http://xvvk.baihongyu.com/

    你可能感兴趣的文章
    Openlayers Select的用法、属性、方法、事件介绍
    查看>>
    Openlayers Source基础及重点内容讲解
    查看>>
    Openlayers view三要素(zoom,center,projection)及其他参数属性方法介绍
    查看>>
    OpenLayers 入门使用
    查看>>
    Openlayers 入门教程(一):应该如何学习 Openlayers
    查看>>
    openlayers 入门教程(七):Interactions 篇
    查看>>
    openlayers 入门教程(三):view 篇
    查看>>
    openlayers 入门教程(九):overlay 篇
    查看>>
    openlayers 入门教程(二):map 篇
    查看>>
    openlayers 入门教程(五):sources 篇
    查看>>
    openlayers 入门教程(八):Geoms 篇
    查看>>
    openlayers 入门教程(十三):动画
    查看>>
    openlayers 入门教程(十二):定位与轨迹
    查看>>
    openlayers 入门教程(十五):与 canvas、echart,turf 等交互
    查看>>
    openlayers 入门教程(十四):第三方插件
    查看>>
    openlayers 入门教程(四):layers 篇
    查看>>
    OpenLayers 项目分析(三)-OpenLayers中定制JavaScript内置类
    查看>>
    Openlayers下载与加载geoserver的wms服务显示地图
    查看>>
    Openlayers中使用Cluster+Overlay实现点击单个要素和聚合要素时显示不同弹窗
    查看>>
    Openlayers中使用Cluster实现点位元素重合时动态聚合与取消聚合
    查看>>