ARM的基本数据类型
ARM采用的是32位架构,ARM的基本数据类型有以下3种。
Byte:
·字节,8bit.
Halfword:
·半字,16bit(半字必须与2字节边界对齐)。
Word:
·字,32bit(字必须与4字节边界对齐)。
·存储器可以看做是序号为0~2432-1的线性字节阵列。每一个字节都有唯一的地址。
ARM主要有7个基本工作模式(Cortex-A系列有八种)
模式 | 简介 | 说明 |
User(用户) | 非特权模式,大部分任务执行在这种模式 MOV R0,#0x1 MSR CPSR,R0 | 用户程序运行模式 |
FIQ(快速中断) | 当一个高优先级(fast) 中断产生时将会进入这种模式 | 快速中断模式 |
IRQ(一般中断) | 当一个低优先级(normal) 中断产生时将会进入这种模式 | 普通中断模式 |
Supervisor(管理模式) | 当复位或软中断指令执行时将会进入这种模式 MOV R0,#0x10001 MSR CPSR,R0 | 提供操作系统使用的一种保护模式,swi命令状态 |
Abort(中止) | 当存取异常时将会进入这种模式 | 虚拟内存管理和内存数据访问保护 |
Undef(未定义指令中止 | 当执行未定义指令时会进入这种模式 | 支持通过软件仿真硬件的协处理 |
System(系统) | 使用和User模式相同寄存器集的特权模式 | 运行特权级的操作系统任务 |
Cortex-A特有模式: Monitor : 是为了安全而扩展出的用于执行安全监控代码的模式; 也是一种特权模式
非特权模式只有user模式,其他的都是特权模式
一、用户模式
- 用户模式是用户程序的工作模式,它运行在操作系统的用户态,
- 它没有权限去操作其它硬件资源,只能执行处理自己的数据,
- 也不能切换到其它模式下,要想访问硬件资源或切换到其它模式只能通过软中断(SWI)或产生异常。
二、系统模式
- 系统模式是特权模式,不受用户模式的限制。
- 用户模式和系统模式共用一套寄存器,
- 操作系统在该模式下可以方便的访问用户模式的寄存器而且操作系统的一些特权任务可以体用这个模式访问一些受控的资源。
三、一般中断模式
- 一般中断模式也叫普通中断模式,用于处理一般的中断请求
- 通常在硬件产生中断信号之后自动进入该模式
- 该模式为特权模式,可以自由访问系统硬件资源
四、快速中断模式
- 快速中断模式是相对一般中断模式而言的,它是用来处理对时间要求比较紧急的中断请求
- 主要用于高速数据传输及通道处理中。
五、管理模式(SVC)
- 管理模式是CPU上电后默认模式
- 因此在该模式下主要用来做系统的初始化
- 软中断处理也在该模式下,当用户模式下的用户程序请求使用硬件资源时通过软件中断进入该模式。
六、中止模式
- 中止模式用于支持虚拟内存或存储器保护,
- 当用户程序访问非法地址,没有权限读取的内存地址时,会进入该模式,
- linux下编程时经常出现的segment fault通常都是在该模式下抛出返回的。
七、未定义模式
- 未定义模式用于支持硬件协处理器的软件仿真,
- CPU在指令的译码阶段不能识别该指令操作时,会进入未定义模式。
八、Monitor(Cortex-A特有)
- 是为了安全而扩展出的用于执行安全监控代码的模式;也是一种特权模式
模式切换
- ARM微处理器的运行模式可以通过软件改变,也可以通过外部中断或异常处理改变。
- 应用程序运行在用户模式下,当处理器运行在用户模式下时,某些被保护的系统资源是不能被访问的。
异常(Exception)
- 指由处理器执行指令导致原来运行程序的中止,
- 异常与指令运行相关,是CPU执行程序产生的,是同步的,可分为精确异常和非精确异常。
- 异常处理遵守严格的程序顺序,不能嵌套,只有当第一个异常处理完并返回后才能处理后续的异常。
异常源:
地址偏移量 | 异常源 | 异常模式 | 描述 |
0x00000000 | Reset(复位) | SVC | 上电时执行 |
0x00000004 | Undef(未定义指令) | Undefined | 当流水线中的某个非法指令到达执行状态时执行 |
0x00000008 | swI(软件中断) | SVC | 当一个软中断指令被执行完的时候执行 |
0x0000000c | Prefetch(预取值异常) | Abort中止模式 | 当一个指令被从内存中预取时,由于某种原因而失败,如果它能到达执行状态这个异常才会产生 |
0x00000010 | Data(数据异常) | Abort中止模式 | 如果一个预取指令试图存取一个非法的内存单元,这时异常产生 |
0x00000014 | - | 未使用 | 未使用 |
0x00000018 | IRQ | IRQ | 通常的中断 |
0x0000001c | FIQ | FIQ | 快速中断 |
异常源与模式关系
- 快速中断请求异常进入快速中断模式,支持高速数传输及通道处理(FIQ异常响应时进入此模式);
- 中断请求异常进入中断模式,用于通用中断处理
- 预取指中止,数据中止异常进入中止模式,用于支持虚拟内存和/或存储器保护;
- 未定义指令异常进入未定义模式,支持硬件协处理器的软件仿真软件中断(swi),复位异常(reset)进入管理模式,操作系统保护代码
异常优先级
多个异常可以在同一时间产生
异常指定了优先级和固定的服务顺序:
Reset
Data Abort
FIQ
IRQ
Prefetch Abort
swI
Undefined instruction