[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)进入管理模式,操作系统保护代码
相关推荐
ChipCamp3 小时前
Chisel芯片开发入门系列 -- 14. CPU芯片开发和解释4(Load/Store指令再探)
arm开发·青少年编程·fpga开发·scala·dsp开发·risc-v·chisel
is08156 小时前
LVGL 使用自定义字体
arm开发
is08158 小时前
嵌入式系统常用架构
arm开发·stm32
snwang_miss1 天前
ARM--中断
arm开发
rit84324991 天前
ARM和DSP芯片的双核嵌入式系统的总体设计
arm开发
huxiao_06011 天前
arm架构系统打包qt程序--麒麟操作系统为例
开发语言·arm开发·qt
only-lucky2 天前
交叉编译ARM环境
arm开发
風月同天2 天前
Keil-C51 与 Keil -ARM 项目工程兼容的方法
arm开发
吻等离子2 天前
Linux ARM 平台 C 语言操作 Excel 文件的常用库与工具汇总(支持 xls 和 xlsx)
linux·c语言·arm开发
YLAD2 天前
makefile中include *.d文件的作用
arm开发