[ARM入门]ARM模式及其切换、异常

ARM技术特征

  • ARM处理器有如下特点
    • 体积小、功耗低、成本低、性能高
    • 支持Thumb(16位)/ARM(32位)双指令集,能很好地兼容8位/16位器件
    • 大量使用寄存器,指令执行速度更快
    • 大多数数据操作都在寄存器中完成
    • 寻址方式灵活简单,执行效率高
    • 指令长度固定

ARM的基本数据类型

ARM采用的是32位架构,ARM的基本数据类型有以下三种

  • Byte:字节,8bit
  • Halfword:半字,16bit(半字必须与2字节边界对齐)
  • word:字,32bit(字必须与4字节边界对齐)

存储器可以看作是序号为0-2^32-1的线性字节阵列,每一个字节都有唯一的地址

ARM处理器工作模式

Cortex-A系列的ARM处理器工作模式有8种:

  • 用户模式

    用户模式是用户程序的工作模式

    他运行在OS的用户态,没有权限去操作其他硬件资源,只能执行处理自己的数据

    也不能切换到其他模式下,想要访问硬件资源或切换到其他模式只能通过软中断(SWI)或产生异常

  • 系统模式

    系统模式是特权模式,不受用户模式的限制

    用户模式和系统模式共用一套寄存器

    操作系统在该模式下可以方便的访问用户模式的寄存器,而且操作系统的一些特权任务可与使用这个模式访问一些受控的资源

  • 一般中断模式

    一般中断模式也叫普通中断模式,用于处理一般的中断请求

    通常在硬件产生中断信号之后自动进入该模式

    该模式为特权模式,可以自由访问系统硬件资源

  • 快速中断模式

    是相对于一般中断模式而言的,它是用来处理对时间要求比较紧急的中断请求

    主要用于高速数据传输及通道处理中

  • 管理模式(SVC)

    是CPU上电后默认模式

    因此在该模式下主要用来做系统的初始化

    软中断处理也在该模式下,当用户模式下的用户程序请求使用硬件资源时通过软件中断进入该模式

  • 中止模式

    用于支持虚拟内存或存储器保护

    当用户程序访问非法地址,没有权限读取的内存地址时,会进入该模式

    linux下编程时经常出现的segment fault通常都是在该模式下抛出返回的

  • 未定义模式

    用于支持硬件协处理器的软件方针,CPU在指令的译码阶段不能识别该指令操作时,会进入未定义模式

  • Monitor

    是为了安全而扩展出的用于执行安全监控代码的模式

    也是一种特权模式

模式切换

ARM微处理器的运行模式可以通过软件改变,也可以通过外部中断或异常处理改变

应用程序运行在用户模式下

当处理器运行在用户模式下时,某些被保护的系统资源是不能被访问的

异常(Exception)

指由处理器执行指令导致原来运行程序的种植

异常与指令运行相关,是CPU执行程序产生的,是同步的,可分为精确异常和非精确异常

异常处理遵守严格的程序顺序,不能嵌套,只有当第一个异常处理完并返回后才能处理后续的异常

  • ARM中的异常源
  • 异常源与模式关系
    • 快速中断请求异常进入快速中断模式,支持高速数传输及通道处理(FIQ异常响应时进入此模式)
    • 中断请求异常进入中断模式,用于通用中断处理
    • 欲取指中止,数据中止异常进入中止模式,用于支持虚拟内存和/或存储器保护
    • 未定义指令异常进入未定义模式
    • 支持硬件协处理器的软件仿真软件中断(swi),复位异常(reset)进入管理模式,操作系统保护代码
相关推荐
KeLin&1 小时前
讯为iTOP4412-Qt5.7环境搭建
开发语言·arm开发·qt·arm
切糕师学AI1 天前
ARM 应用程序状态寄存器APSR的整数状态(NZCV)位
arm开发·寄存器·apsr
早日退休!!!2 天前
ARM Cortex-M核 【保存上下文&恢复上下文】
arm开发·单片机·嵌入式硬件
早日退休!!!2 天前
ARM A核、ARM M核、X86与RISC-V架构:寄存器作用及上下文处理差异报告
arm开发·架构·risc-v
A-花开堪折2 天前
Qemu-NUC980(十一):SPI Controller
linux·arm开发·驱动开发·嵌入式硬件
Q_21932764553 天前
基于ARM的嵌入式温度控制系统的设计
arm开发
想你依然心痛3 天前
从x86到ARM的HPC之旅:鲲鹏开发工具链(编译器+数学库+MPI)上手与实战
java·开发语言·arm开发·鲲鹏·昇腾
MUTA️3 天前
x86 架构下运行 ARM-ROS2 Docker 镜像操作指南
arm开发·docker·架构
比奇堡派星星4 天前
Linux 杂项设备驱动框架详解
linux·arm开发·驱动开发
xingzhemengyou14 天前
LINUX 通过/proc/interrupts了解系统硬件中断的使用情况
linux·arm开发