系统学习ARM之六 --异常处理
来源:互联网 发布:jboss 1099端口 编辑:程序博客网 时间:2024/05/17 00:56
一、简介:
异常:
是一种突发情况。异常发生后,处理器要进行相应的处理(异常处理),切换到对应的异常工作模式。
二、四大步三小步:(异常处理的硬件完成的事项)
(1)拷贝 CPSR 到 SPSR_<mode>
(2)设置适当的 CPSR 位:
①改变处理器状态进入 ARM 状态
②改变处理器模式进入相应的异常模式
③设置中断禁止位禁止相应中断 (如果需要)
(3)保存返回地址到 LR_<mode>
(4)设置 PC 为相应的异常向量
三、异常处理的返回: --通过异常返回指令
1. 要做的:
- 从 SPSR_<mode>恢复CPSR
- 从LR_<mode>恢复PC
2. 返回的具体实现指令:
①第一种方式:指令带 “S” 后缀 + PC做为目的寄存器
movs pc,lr
②第二种方式:如果 lr之前被压栈的话使用LDM +“ ^”
ldmfd sp!,{ pc }^
注意:有些异常处理返回值需要修正lr寄存器
所有从异常返回的情况:
a、从SWI 和Undef 异常返回:
movs pc,lr
b、从FIQ, IRQ 和 预取异常(Prefect Abort)返回:
SUBS pc,lr,#4 == @ pc = lr -4 和 cpsr = spsr 两句
c、从数据异常( Data Abort)返回:
SUBS pc,lr,#8
d、如果LR之前被压栈的话:
MOVS pc,lr
四、异常源处理优先级表:
1. 表:
Reset 最高
Data Abort //数据存取异常
FIQ
IRQ
Prefetch Abort
SWI
Undefined instruction
2. 向量表指令:
①异常向量表:放的是不同异常源的处理地址。
②异常向量表指令:
LDR PC, [PC, #+0xFF0] 可寻址±4k
MOV PC, #0x30000000 立即数
B IRQ_handler 可寻址±32M
五、中断控制器:
1. 为什么会有中断控制器?:
ARM内核(小核)只有两个中断源,用中断控制器来扩展中断源
2. 中断控制器要实现的功能 / 中断控制器的作用:
- 择优----(优先级)
- 跳转到对应的中断处理函数
- 选择处理该中断源的cpu
六、FIQ 比 IRQ快的原因:
- fiq 比 irq 的优先级高
- FIQ 向量位于向量表的最末端,异常处理不需要跳转
- FIQ 比 IRQ 多5个私有的寄存器(r8-r12),在中断操作时,压栈出栈操作的少。
0 0
- 系统学习ARM之六 --异常处理
- 系统学习ARM之六 --异常处理
- 学习PL/SQL之六:处理异常
- arm学习笔记之Arm异常
- ARM基础学习-异常中断处理
- ARM基础学习-SWI异常中断处理
- ARM Linux异常处理之data abort
- Arm架构异常处理流程之中断
- arm linux之data abort异常处理
- Java自学总结之六异常处理
- Windows 系统编程初探 (六)结构化异常处理之三:SEH 的简单应用
- Windows 系统编程初探 (六)结构化异常处理之三:SEH 的简单应用
- Arm架构异常处理流程之缺页异常
- Spring Boot学习(六)之Web应用的统一异常处理
- 异常和中断处理 ARM系统开发者指南 Chapter9-1
- ARM的异常处理
- arm 异常处理
- ARM的异常处理
- javascript运算符之相等与严格相等
- 【static&extern】static和extern的区别
- ocp-v13-045
- 黑马程序员————JAVA之GUI
- 杭电acm1271 整数对
- 系统学习ARM之六 --异常处理
- 今天和大家分享下OC中的类的存储位置
- 差分约束POJ1201NIntervals解题报告
- 【java】cookie和session
- ocp-v13-046
- 常用的微分运算法则
- 深入 HBase 架构解析(1)
- 向量旋转
- 初识namp及简单使用