[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)进入管理模式,操作系统保护代码
相关推荐
AndyHeee8 天前
【SVC、PendSV(系统异常) 与 外设 IRQ 、NVIC笔记】
arm开发
暮云星影8 天前
瑞芯微rk3588利用Rockchip NPU运行大语言模型(LLM)
arm开发·人工智能·语言模型·自然语言处理
techdashen8 天前
绕过系统 ICMP:用 rawsock、Npcap 和 WMI 找到默认网卡
开发语言·arm开发·rust
振南的单片机世界8 天前
ARM中断比51快在哪?硬件压栈+NVIC集中管理
arm开发·stm32·单片机·嵌入式硬件
墨绿色的摆渡人8 天前
论文笔记(一百三十七)Learning Dual-Arm Push and Grasp Synergy in Dense Clutter
arm开发·论文阅读
暮云星影8 天前
全志linux开发屏幕适配(一)屏幕参数设置说明
linux·arm开发
m0_547486668 天前
《ARM Cortex-M4嵌入式应用技术——基于STM32F407、STM32CubeMX与Proteus》全套PPT课件
arm开发·stm32·proteus
Lanceli_van8 天前
SQLite 3.45.2(sqlite-autoconf-3450200)ARM 交叉编译完整步骤
arm开发·sqlite
暮云星影8 天前
全志linux开发屏幕适配(二)`HDMI`驱动适配说明
linux·arm开发·驱动开发
暮云星影8 天前
瑞芯微rk3566开发FIT Secure Boot
linux·arm开发·驱动开发·安全