【问题标题】:in arm7tdmi, when FIQ and RIQ occures at same time so how both are executed sequentially,first FIQ and thenIRQ?在 arm7tdmi 中,当 FIQ 和 IRQ 同时发生时,如何按顺序执行,首先是 FIQ,然后是 IRQ?
【发布时间】: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


【解决方案1】:

与 M-profile 架构不同,M-profile 架构具有非常不同的异常模型,允许尾链异常,而经典/A-profile 架构以完全直接的方式做事。

当相应的 CPSR.F/CPSR.I 位清零时,会在指令边界检查中断。因此,假设 FIQ 处理程序很简单,一旦 0x108 处的指令完成,FIQ 就会从 CPU 所处的任何模式中获取(因为它优先于 IRQ),FIQ 处理程序在 FIQ 和 IRQ 被屏蔽的情况下运行,然后执行异常返回 0x110。整个过程中碰巧有一个 IRQ 未决这一事实没有任何区别。

注意点是 FIQ 处理程序末尾的返回指令与被返回的指令之间的边界。 FIQ 返回将恢复先前的 SPSR,它(可能)具有未屏蔽的 IRQ。因此,在执行该返回指令之后在在 0x110 处执行返回指令,CPU 回到初始模式,IRQ 未屏蔽,IRQ 未决。所以它需要它; IRQ 处理程序在 IRQ 被屏蔽的情况下运行,然后执行异常返回到 0x110,因此执行最终会继续服务于两个中断。

对于 ARM7TDMI,这就是它的全部内容。在较新的架构版本(ARMv7 及更高版本)中,当预期采用异步异常时,有一些规则会更加严格,因为一旦 CPU 设计开始变得超标量和/或无序,“指令边界”的概念就会变得有点模糊。不过,这种特殊情况在现代 CPU 上并没有什么不同,因为从 FIQ 返回的异常构成了一个上下文同步事件,之后必须立即处理任何未决的异步异常(即 IRQ)。

【讨论】:

    猜你喜欢
    • 2012-03-09
    • 2012-11-26
    • 2012-09-07
    • 2015-11-14
    • 2012-12-14
    • 1970-01-01
    • 1970-01-01
    • 2021-03-24
    • 1970-01-01
    相关资源
    最近更新 更多