【发布时间】:2016-09-25 17:32:24
【问题描述】:
在 arm7tdmi 中,假设正在执行指令,同时 FIQ 和 IRQ 都同时发生。现在根据优先级 FIQ 将被处理然后 IRQ 但我的问题是从 FIQ 返回后它将如何处理 IRQ i 表示 FIQ 返回时将进行什么处理以及在 FIQ 处理程序的返回语句之后将如何将控制转移到 IRQ 处理程序?
示例: 地址 => 指令
0x00000100 : MOV R0,R1
0x00000104 : MOV R0,R1
=>> 0x00000108 : MOV R0,R1
0x00000110 : MOV R0,R1
0x00000114 : MOV R0,R1
0x00000118 : MOV R0,R1
;假设在 0x00000108 处正在执行指令,并且 FIQ 和 IRQ 在时间被引发
【问题讨论】:
-
如果 IRQ 仍然处于挂起状态,那么它将在 FIQ 处理程序返回后立即被视为正常(假设所述处理程序没有做任何疯狂的事情,例如在确认 FIQ 和返回)。您究竟想澄清什么?
-
查看当前正在执行的指令将在现在执行 FIQ 处理程序的返回指令之前执行 FIQ 处理程序通常发生的情况是将 r14_FIQ 和 spsr_FIQ 复制到模式的 pc 和 cpsr它被提出了。不假设 IRQ 也处于未决状态,那么在 FIQ 中执行返回指令后将执行什么过程,我的意思是它会在用户模式下执行一个机构,然后 IRQ 将被处理或直接 r14_FIQ 和 spsr_FIQ 将被复制到R14_IRQ 和 spsr_FIQ 到 spsr_IRQ?
-
您要查找的词是 tailchaining。如果在执行较高优先级的中断期间有一个较低或相等优先级的中断处于挂起状态,则内核将在之后直接跳转到该中断,不执行任何用户代码。
-
谢谢@Andrea Biondo 我明白你的解释,但我想知道在 FIQ 的返回指令上要执行的步骤。我的意思是将控制从 FIQ_HANDLER 转移到 IRQ_HANDLER om tailchaining 的步骤是什么?
标签: exception arm irq arm7 fiq