DataAbort简单分析
扫描二维码
随时随地手机看文章
DataAbort中止表示当前存储器访问不能被完成。
有两种类型的中止:
预取指中止: 发生在指令预取指过程中
数据中止: 发生在对数据访问时
1.预取指中止
当发生预取指中止时ARM7TDMI-S内核将预取的指令标记为无效但在指令到达流水线的执行阶段时才进入异常,如果指令在流水线中因为发生分支而没有被执行,中止将不会发生。
在处理中止的原因之后不管处于哪种处理器操作状态处理程序都会执行下面的指令
SUBSPC,R14_abt,#4
这个动作恢复了PC和CPSR并重试被中止的指令
2.数据中止
当发生数据中止时根据指令的类型产生不同的动作
●数据转移指令LDR,STR回写到被修改的基址寄存器中止处理程序必须注意这一点
●交还指令SWP中止好像没有被执行过一样中止必须发生在SWP指令进行读访问时
●块数据转移指令LDM,STM完成 当回写被设置时基址寄存器被更新在指示出现中止后。ARM7TDMI-S内核防止所有寄存器被覆盖这意味着ARM7TDMI-S内核总是会保护被中止的LDM指令中的r15(总是最后一个被转移的寄存器)
中止的机制使指令分页的虚拟存储器系统能够被实现。在这样一个系统中,处理器允许产生仲裁地址。当某一地址的数据无法访问时,存储器管理单元MMU通知产生了中止,中止处理程序必须找出中止的原因,使请求的数据可以被访问并重新执行被中止的指令。应用程序不必知道可用存储器的数量,也不必知道它的被中止时所处的状态。在修复产生中止的原因后,不管处于哪种处理器操作状态,处理程序都必须执行下面的返回指令 SUBSPC,R14_abt,#8 这个动作恢复了PC和CPSR并重试被中止的指令