当前位置:首页 > 通信技术 > 通信设计应用
[导读]   字节 8位   半字 16位   字 32位   Code, RO-data   RW-data,ZI-data   Code为程序代码部分

  字节 8位

  半字 16位

  字 32位

  Code, RO-data

  RW-data,ZI-data

  Code为程序代码部分

  RO-data 表示 程序定义的常量 const temp;

  RW-data 表示 已初始化的全局变量

  ZI-data 表示 未初始化的全局变量

  Program Size: Code=“18248” RO-data=320 RW-data=260 ZI-data=3952

  Code, RO-data,RW-data 。..。..。..。..。.flash

  RW-data, ZIdata.。..。..。..。..。..。..RAM

  初始化时RW-data从flash拷贝到RAM

  生成的map文件位于list文件夹下 (KEIL)

  Total RO Size (Code + RO Data) 18568 ( 18.13kB)

  Total RW Size (RW Data + ZI Data) 4212 ( 4.11kB)

  Total ROM Size (Code + RO Data + RW Data) 18828 ( 18.39kB)

  ARM指令的长度刚好是1个字(分配为占用4个字节),Thumb指令的长度刚好是半字(占用2个字节)

  R0-R15 (R15-PC,R14-LR,R13-SP) 32位

  每个异常模式还带有一个程序状态保存寄存器 (SPSR),它用于保存在异常事件发生之前的CPSR

  LDMIA R1!,{R2-R7, R12} ;将R1单兀中的数据读出到R2-R7,R12, R1自动加1

  STMIA RO!,{R3-R6,R10} ;将R3-R6,R10中的数据保存到RO指向的地址,RO自动加1

  在数据传送之前,将偏移量加到Rn中,其结果作为传送数据的存储地址。若使用后缀“!”,则结果写回到Rn中,且Rn值不允许为R15.指令举例如下:

  LDR Rd, [Rn, #Ox4]!

  LDMFD SP!,{R0-R3,PC}^ ;中断返回

  “^”符号表示这是一条特殊形式的指令。这条指令在从存储器中装载PC的同时(PC是最后恢复的),CPSR也得到恢复

  大端格式(Big-endian)

  小端格式(Little-endian)

  数据0x12345678存储格式

  大端格式

  低地址《----0x12|0x34|0x56|0x78----》高地址

  小端格式

  低地址《----0x78|0x56|0x34|0x12----》高地址

  ARM微处理器支持7种运行模式,分别为: CPSR M[4:0]

  用户模式(usr):ARM处理器正常的程序执行状态。 10000

  快速中断模式(fiq):用于高速数据传输或通道处理。 10001

  外部中断模式(irq):用于通用的中断处理。 10010

  管理模式(svc):操作系统使用的保护模式。 10011

  数据访问终止模式(abt):当数据或指令预取终止时进入该模式,可用于虚拟存储及存储保护。10111

  系统模式(sys):运行具有特权的操作系统任务。 11111

  定义指令中止模式(und):当未定义的指令执行时进入该模式,可用于支持硬件协处理器的软件仿真。 11011

  ARM正常工作一般工作在用户模式和系统模式,复位的时候进入管理模式

  对于ARM指令集来说,PC指向当前指令的下两条指令的地址

  注意pc,在调试的时候显示的是当前指令地址,而用mov lr,pc的时候lr保存的是此指令向后数两条指令的地址

  假设反汇编代码: 0x000001 : mov lr pc

  (此时查看PC寄存器的值是0x000001,但实际PC值是0x000003, lr里面保存的就是0x000003)

  fields 指定传送的区域(psr CPSR或SPSR)

  c 控制域屏蔽字节(psr[7..0])

  x 扩展域屏蔽字节(psr[15..8])

  s 状态域屏蔽字节(psr[23..16])

  f 标志域屏蔽字节(psr[31..24])

  例如:MSR cpsr_c, #0xD3 ; CPSR[7.。.0] = 0xD3

  CODE SIZE, RO DATA, RW DATA, ZI DATA, idata, pdata---project Map 文件解读(一)

  opTImizaTIon project时,开始往往是关注一时间性能,如codec mips或MCPS等。当时间性能达到了要求时,往往还会加入size这一参数来作比较,这时就要考虑各种各样的size。这一性能参数可能在 project requirements book中有明显的说明,在test performance result或在release note中也有更加准备的数据记录。

  如下表:

  Program ROM Data RAMROM Table

  Scratch StackStaTIc

  XXXXXXXXXX

  首先我们要弄清楚这些size的含义以及所反应的性能意义。

  1、CODE SIZE, RO DATA, RW DATA, ZI DATA

  上面这些变量是在ARM 开发环境下会出现的数值,可以在armlink中加一些参数,得到相应有.map文件,从中就能准确的获取这些值,有一篇文章详细说明这些含义:

  ARM程序(指在ARM系统中正在执行的程序,而非保存在ROM中的bin文件)的组成

  一个ARM程序包含3部分:RO段,RW段和ZI段

  RO是程序中的指令和常量

  RW是程序中的已初始化变量

  ZI是程序中的未初始化的变量

  由以上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程序才能正常访问变量。否则只能运行不含变量的代码。

  说了上面的可能还是有些迷糊,RO,RW和ZI到底是什么,下面我将给出几个例子,最直观的来说明RO,RW,ZI在C中是什么意思。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读

DBS Group 首席执行官 Tan Su Shan 蝉联榜首 科技行业共有 16 位女性入选 2026 年榜单,成为上榜人数最多的行业 榜单涵盖 14 个市场的 100 位女性,其中 24 位首次上榜...

关键字: AN GROUP ARM COM

智能体AI让CPU重新回到数据中心的核心位置,这一点产业已经形成共识。更值得关注的是:恰恰在这个转折点上,Arm在加速计算市场历史性地超越了x86。原因其实也不神秘。x86的架构是为通用计算打磨的,而AI智能体要的是编排...

关键字: ARM Neoverse AGI CPU 数据中心 AI X86

智能体需要持续感知、记忆、推理和行动,图形渲染需要在不增加功耗的前提下逼近桌面级画质,两个变化同时指向同一个问题:移动 AI 的计算平台应该具备什么,谁能提供一套被市场广泛采纳的标准答案,谁就掌握下一代移动体验的定义权。...

关键字: AGI ARM AI 原生 CPU 智能体 GPU 神经图形

·Arm 全面设计生态项目扩展至物理 AI 领域,汇聚覆盖整个技术栈的专业能力,降低集成复杂性并加速自主智能系统创新。 ·机器人能力分级框架是生态系统首批倡议之一,致力于构建机器人领域的通用语言,为定义和推动机器人系统...

关键字: ARM 物理 AI 机器人 具身智能

·Arm CSS for Mobile 2 是全新的 AI 原生计算平台,专为智能体 AI 和新一代电影级移动图形体验的系统级需求而打造。 ·全新 Arm Mali G2-Ultra NX 是业界最先进的移动 GPU,...

关键字: ARM AI 原生计算平台 智能体 AI 移动图形创新

从平台创新到生态协同,最新进展正推动 AI 计算持续演进,从云延伸至边缘,并迈向物理世界。

关键字: 智能体时代 ARM AGI Agent CPU

·Arm NeoverseCSSN4 是 Arm 迄今为止可配置性最高的 CSS,可帮助合作伙伴以最快速度完成从 CSS 到芯片产品的落地。 ·Arm AGI CPU 在AI生态系统中的发展势头持续增强,云服务提供商、...

关键字: ARM AGI CPU Neoverse AI基础设施

革命性设计将 Arm 原生应用引入 IBM 旗舰级主机和服务器,为企业计算提供更丰富的软件选择 北京2026年8月26日 /美通社/ -- 近日,在年度 Hot Chips...

关键字: IBM Linux 处理器 ARM

在ARM架构的嵌入式与服务器开发场景中,程序异常崩溃、随机跑飞是长期困扰开发者的核心痛点。传统调试模式下,开发者只能依赖仿真器单步复现、手动排查寄存器值,一旦程序部署到无调试器的生产环境,这类问题几乎无从定位。而Back...

关键字: ARM 寄存器

传统PLC硬件专机价格高、扩展性受限,而ARM+Linux平台成本低、生态丰富。将PLC的梯形图/ST逻辑解释为软件运行时,在ARM Linux上执行,既能保留PLC的可靠性思维,又能利用Linux的网络、存储和图形能力...

关键字: 软PLC 嵌入式Linux ARM
关闭