当前位置: 首页 > article >正文

RO段、RW段和ZI段的理解

RO段、RW段和ZI段

一直以来对于ARM体系中所描述的RO,RW和ZI数据存在似是而非的理解,这段时间对其仔细了解了一番,发现了一些规律,理解了一些以前书本上有的但是不理解的东西,我想应该有不少人也有和我同样的困惑,因此将我的一些关于RO,RW和ZI的理解写出来,希望能对大家有所帮助。
            要了解RO,RW和ZI需要首先了解以下知识:
            ARM程序的组成
            此处所说的“ARM程序”是指在ARM系统中正在执行的程序,而非保存在ROM中的bin映像(image)文件,这一点清注意区别。
            一个ARM程序包含3部分:RO,RW和ZI
            RO是程序中的指令和常量
            RW是程序中的已初始化变量
            ZI是程序中的未初始化以及初始化为0的变量
            由以上3点说明可以理解为:
            RO就是readonly,
            RW就是read/write,
            ZI就是zero
            ARM映像文件的组成
            所谓ARM映像文件就是指烧录到ROM中的bin文件,也成为image文件。以下用Image文件来称呼它。
            Image文件包含了RO和RW数据。
            之所以Image文件不包含ZI数据,是因为ZI数据都是0,没必要包含,只要程序运行之前将ZI数据所在的区域一律清零即可。包含进去反而浪费存储空间。
            Q:为什么Image中必须包含RO和RW?
            A:因为RO中的指令和常量以及RW中初始化过的变量是不能像ZI那样“无中生有”的。
            ARM程序的执行过程
            从以上两点可以知道,烧录到ROM中的image文件与实际运行时的ARM程序之间并不是完全一样的。因此就有必要了解ARM程序是如何从ROM中的image到达实际运行状态的。
            实际上,RO中的指令至少应该有这样的功能:
            1. 将RW从ROM中搬到RAM中,因为RW是变量,变量不能存在ROM中。
            2. 将ZI所在的RAM区域全部清零,因为ZI区域并不在Image中,所以需要程序根据编译器给出的ZI地址及大小来将相应得RAM区域清零。ZI中也是变量,同理:变量不能存在ROM中
            在程序运行的最初阶段,RO中的指令完成了这两项工作后C程序才能正常访问变量。否则只能运行不含变量的代码。


http://www.kler.cn/a/274817.html

相关文章:

  • springboot 配置Kafka 关闭自启动连接
  • 数智化转型是什么?
  • Web3.0安全开发实践:探索比特币DeFi生态中的PSBT
  • 系统移植——Linux 内核顶层 Makefile 详解
  • 架构信息收集(小迪网络安全笔记~
  • USACO备考书籍合集
  • 一次完整的 HTTP 请求所经历的步骤
  • XML语言的学习记录5- XSD
  • 智慧城市的发展趋势与挑战:未来展望
  • python 笔记:locals
  • Android Studio实现内容丰富的安卓外卖平台
  • C# ---Extension Method
  • 当人工智能遇上“理解偏差”:一场关于天气的宇宙之旅
  • 【Python 48小时速成 3】输入与输出
  • Yarn 管理的前端项目转换为使用 npm
  • docker入门(五)—— 小练习,docker安装nginx、elasticsearch
  • python大学生健身爱好者交流网站flask-django-nodejs-php
  • 1035. 不相交的线
  • python基础18_作用域与名称空间
  • windows 多网卡情况dns解析超时问题的排查
  • 2024.3.9|第十五届蓝桥杯模拟赛(第三期)
  • (delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(访问说明符)
  • mysql之基本概念与安装
  • Springboot+vue的仓库管理系统(有报告)。Javaee项目,springboot vue前后端分离项目。
  • android、Jetpack Compose使用 Room数据库kapt注解时出现的相关问题整理。
  • 用C语言打造自己的Unix风格ls命令