[当ARMv7-A架构实现出现IRQ异常时如何计算LR值

问题描述 投票:1回答:1

我正在研究Arm体系结构参考手册ARMv7-A ARMv7-R版本文档。当我阅读本手册中的异常处理部分时,我感到困惑。 问题是有关当ARMv7-A体系结构实现IRQ异常时如何确定LR值。>>

示例:假设处理器正在地址0x_0000_1000上执行一条指令,并执行了IRQ。首先,我们必须计算一些用于计算LR的参数。

  1. 首选返回地址,这是在这种情况下要执行的下一条指令的地址。因此,拇指指令集中的首选返回地址= 0x_0000_1002,或者手臂指令集中的首选返回地址= 0x_0000_1004preferred return address for the exception
  2. PC
  3. ,它是程序计数器并保存当前程序地址。在这种情况下,处于拇指指令状态的PC = 0x_0000_1004或处于臂指令状态的PC = 0x_0000_1008。[C0 ]

    然后,在此IRQ异常时,这里有两种方法可以确定LR值。

  1. 使用首选返回地址。 LR = 首选返回地址 + 偏移量取决于发生异常时的指令集状态。在这种情况下,LR = 0x_0000_1002 + 4处于拇指指令状态或< [LR = 0x_0000_1004 + 4处于布防指令状态。how to calculate PC使用
  2. PC
  3. 。如果是拇指指令集,则为LR = PC-0;如果是臂指令集,则为LR = PC-4。在这种情况下,拇指指令集为LR = 0x_0000_1004-0LR = 0x_0000_1008-4处于布防指令状态。 Offsets applied to Link value for exceptions taken to PL1 modes

    问题

:在拇指设置状态和手臂设置状态下,两种方法计算的LR结果均为different(使用first method得出LR = 0x_0000_1006或LR = 0x_0000_1008 ,但第二种方法我们得到LR = 0x_0000_1004或LR = 0x_0000_1004)。哪个是正确的,或者我的理解有什么错误?我现在正在研究《 ARM体系结构参考手册》 ARMv7-A ARMv7-R版文档。当我阅读本手册中的异常处理部分时,我感到困惑。 ...
arm interrupt-handling armv7 irq
1个回答
0
投票
TL; DR-IRQ Pseudocode description of taking the IRQ exception将指向下一条指令以完成工作,就像通常不会中断地运行一样。否则,在存在中断的情况下,代码将无法执行相同的操作。
© www.soinside.com 2019 - 2024. All rights reserved.