【发布时间】:2015-12-28 04:46:24
【问题描述】:
我正在尝试了解中断在 ARM 架构中是如何工作的(具体来说是 ARM7TDMI)。我知道有七个异常(复位、数据中止、FIQ、IRQ、预取中止、SWI 和未定义指令),它们以特定模式执行(分别为主管、中止、FIQ、IRQ、中止、主管和未定义)。我有以下问题。
1.当CPSR(status register)中的I和F位设置为1来禁止外部快速中断时,其他5个异常是否也被禁止了?
2. 如果在I和F位使能时SWI没有被禁止,那么是否可以在外部中断的ISR中故意触发SWI异常?
3.当任何中断被触发保存CPSR到SPSR时,改变模式由处理器自己完成。那么,编写 ISR 处理程序函数并使用处理程序地址更新向量表是否足够(我不想将 r0 保存到 r12 通用寄存器)?
4. 每当执行模式更改时,处理器内部是否会进行上下文保存(即使我们手动更改模式)?
5. 如何屏蔽/禁用 SWI 异常?
谢谢。
【问题讨论】:
-
如果中止或 SWI 可以被禁用,您认为事情会如何运作?用户空间代码将如何对其系统调用被忽略作出反应?如果执行没有被转移到故障处理程序,那么当它需要的数据/指令不存在时,CPU 将如何继续执行?
-
嗨 Notlikethat,我不知道 ARM 是如何做这些事情的。请把我当作初学者,我并不是说要永久禁用它们。想知道它们是否可以被禁用,如果可以,那么怎么做。
-
啊,我的评论并不是为了批评,而是作为一个矛盾的思想实验。忽略任何特定于 ARM 的细节,考虑中断(您知道可以被屏蔽)是 异步,而您询问的其他事情是通过执行特定指令触发的。屏蔽中断可以防止它现在发生,但无论如何它可能只是在以后发生;现在想象屏蔽一个 同步 事件,如果中间的代码取决于该事件的发生,你将如何进行到稍后可以取消屏蔽它的点? ;)
-
是的,我现在明白了。谢谢。