嵌入式1-ARM学习(四)—ARM的编程模式

ARM的编程模式和7种模式

ARM的基本设定

采用32位架构,并提供了多种指令集。

ARM架构的基本约定如下:

  • Byte(字节):8位(bits)
  • Halfword(半字):16位(2字节)
  • Word(字):32位(4字节)

在ARM架构中,数据以字节为基本单位进行存储和处理,而不同大小的数据可以用不同数量的字节表示。例如,一个字节可以存储8个二进制位的数据,一个半字可以存储16个二进制位的数据,而一个字可以存储32个二进制位的数据。

大部分ARM核心提供以下指令集:

  • ARM指令集(32位):这是最基本和最常用的指令集,用于处理32位数据和指令。它提供了丰富的指令和功能,适用于各种应用场景。

  • Thumb指令集(16位):为了提高代码密度和节省存储空间,ARM引入了Thumb指令集。这个16位的指令集可以与ARM指令集混合使用,适用于对存储空间和功耗要求较高的应用。

  • Thumb2指令集(16位和32位):为了更好地平衡代码密度和性能,ARM推出了Thumb2指令集。这个指令集可以同时支持16位和32位的指令,根据需求选择最适合的指令长度。它在代码密度和性能之间提供了更好的平衡。

Jazelle cores 支持 Java bytecode

一些ARM核心支持Jazelle技术,这意味着它们能够直接执行Java字节码,而无需先将其转换为机器码。这样的核心被称为Jazelle核心。Jazelle技术可以提高在ARM处理器上运行Java应用程序的性能和效率。它通过将Java字节码解释为原生指令来实现,在某些情况下可以达到与原生指令相当的执行速度。这一特性使得ARM处理器成为一种适合于低功耗、嵌入式Java应用的选择。

ARM处理器工作模式

  • ARM 有7个基本工作模式:
    • User Mode(用户模式) : 非特权模式,大部分任务执行在这种模式
    • FIQ Mode (快速中断模式):   当一个高优先级(fast) 中断产生时将会进入这种模式
    • IRQ Mode(普通中断模式) :   当一个低优先级(normal) 中断产生时将会进入这种模式
    • Supervisor Mode(监管模式) :当复位或软中断指令执行时将会进入这种模式
    • Abort Mode (异常模式): 当存取异常时将会进入这种模式
    • Undefined Mode(未定义模式) : 当执行未定义指令时会进入这种模式
    • System Mode(系统模式) : 使用和User模式相同寄存器集的特权模式

注意:

  • 除User(用户模式)是Normal(普通模式)外,其他6种都是Privilege(特权模式)。
  • Privilege中除Sys模式外,其余5种为异常模式
  • 各种模式的切换,可以是程序员通过代码主动切换(通过写CPSR寄存器);也可以是CPU在某些情况下自动切换。

各种模式下权限和可以访问的寄存器不同

CPU为什么设计这些模式?

  • CPU是硬件,OS是软件,软件的设计要依赖硬件的特性,硬件的设计要考虑软件需要,便于实现软件特性。
  • 操作系统有安全级别要求,因此CPU设计多种模式是为了方便操作系统的多种角色安全等级需要。
  • 此外,多工作模式的设计还能提高系统的效率。不同模式下,CPU可以采用不同的处理方式和优化策略,以适应不同类型的任务和场景。

ARM的37个寄存器详解

ARM 寄存器

  • ARM 总共有 37 个寄存器,但是每种模式下最多只能看到 18 个寄存器,其他寄存器虽然名字相同,但是在当前模式不可见。
  • 普通用户和系统用户模式可见的寄存器是完全一样的,寄存器的权限可能会不一样。例如,在系统模式下,可以访问特权寄存器和某些特殊用途寄存器,而在普通模式下可能无法直接访问这些寄存器。
  • 当进行模式切换时,对应的备用寄存器会替换相对应的寄存器。虽然替换的寄存器名称一样,但是寄存器的地址是不一样的。
  • 对 r13 这个名字来说,在 ARM 中共有 6 个名叫 r13(又叫 sp)的寄存器,但是在每种特定处理器模式下,只有一个 r13 是当前可见的,其他的 r13 必须切换到它们的对应模式下才能看到。这种设计叫影子寄存器(banked register)。

ARM架构中共有37个寄存器,每个寄存器的长度为32位。这些寄存器可以分为以下几类:

  1. 通用寄存器:共有30个通用寄存器,用于存储数据和执行计算操作。这些寄存器被编号为R0到R14。其中,R13寄存器被称为堆栈指针寄存器(Stack Pointer,SP),用于存储当前堆栈的地址;R14寄存器被称为链接寄存器(Link Register,LR),用于存储函数调用的返回地址。

  2. 程序计数器(Program Counter,PC):这是一个特殊的寄存器,用于存储即将执行的指令的地址。

  3. 程序状态寄存器(Current Program Status Register,CPSR):也是一个特殊的寄存器,用于存储当前的程序状态信息,如条件码、中断屏蔽标志等。

  4. 异常模式下的保存状态寄存器(Saved Program Status Register,SPSR):每种异常模式(如中断模式、中止模式等)都有一个对应的SPSR寄存器,用于保存在进入异常处理程序之前的CPSR的值。

CPSR程序状态寄存器

Mode 位:
处理器模式位(Mode 位的作用是标识处理器当前运行的模式
T Bit
ARM  xT 架构支持
T = 0: 处理器处于 ARM 状态
T = 1: 处理器处于 Thumb 状态
条件位:
N = Negative result from ALU(负值标志位)
Z = Zero result from ALU         (零值标志位)
C = ALU operation Carried out(进位标志位)
V = ALU operation o Verflowed(溢出标志位)
条件位可以提供对ALU运算结果的判断和决策,有助于程序根据运算结果的特性执行相应的操作。用于条件执行
  • CPSR中各个bit位表明了CPU的某些状态信息,这些信息非常重要,和后面学到的汇编指令息息相关(譬如BLE指令中的E就和CPSR中的Z标志位有关)
  • CPSR中的I、F位和开中断、关中断有关
  • CPSR中的mode位(bit4~bit0共5位)决定了CPU的工作模式,在uboot代码中会使用汇编进行设置。

PC(r15)程序控制寄存器

PC(Program control register)为程序指针,PC指向哪里,CPU就会执行哪条指令(所以程序跳转时就是把目标地址代码放到PC中)

整个CPU中只有一个PC(CPSR也只有一个,但SPSR有5个)。

ARM的异常处理方式简单介绍

什么是异常

正常工作之外的流程都叫异常

异常会打断正在执行的工作,并且一般我们希望异常处理完成后继续回来执行原来的工作

中断是异常的一种

异常向量表

  • 所有的CPU都有异常向量表,这是CPU设计时就设定好的,是硬件决定的。
  • 当异常发生时,CPU会自动动作(PC跳转到异常向量处处理异常,有时伴有一些辅助动作)
  • 异常向量表是硬件向软件提供的处理异常的支持。

异常向量表是ARM处理器中的一个重要概念,用于存储不同异常的入口地址。当异常发生时,处理器会根据异常类型查找对应的入口地址,并跳转到对应的异常处理程序。

异常向量表是一块特殊的内存区域,其大小通常是固定的,每个异常向量占据一个固定大小的位置。每个异常向量都包含了异常处理程序的入口地址。

ARM的异常处理机制

  1. 当处理器遇到异常情况时,它会暂停当前正在执行的指令,并跳转到异常处理例程。异常处理例程是一段代码,用来处理特定类型的异常。

  2. 处理器会保存当前的上下文信息,包括程序计数器(PC)、寄存器和标志位等重要状态信息。这些信息将在异常处理完成后恢复。

  3. 处理器会根据异常的类型和级别,选择相应的优先级,并进行相应的异常处理。ARM架构定义了三个级别的异常:异常、中断和软件中断。

  4. 异常处理例程会执行相应的处理代码,对异常进行处理。处理过程可能包括一系列操作,如保存现场、处理中断请求、执行异常处理代码等。

  5. 在异常处理完成后,处理器会根据异常发生时保存的上下文信息,恢复原来的状态,包括恢复程序计数器、寄存器和标志位等。

  6. 处理器会从中断处继续执行指令,继续正常的程序执行流程。

ARM的异常处理方式简单介绍

ARM的异常处理方式简单介绍

  • 25
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小白不想画工图

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值