我试图理解在ARM平台上如何在Linux中使用IRQ处理,而我无法理解汇编程序宏“handle_irq”(在arch/arm/kernel/entry-asmv.S中)。当定义CONFIG_MULTI_IRQ_HANDLER时,这是宏:
ldr r1, =handle_arch_irq
mov r0, sp
adr lr, BSYM(9997f)
ldr pc, [r1]
我想它是将函数的地址加载到r1中,堆栈指针加载到r0,链接寄存器加到0x9997F,pc加载到函数地址。
但是我不理解=
前面的=handle_arch_irq
,我不明白为什么返回地址总是固定的(如果在代码中添加了一行,它会改变) ,以及为什么它在电脑上使用ldr,而不是直接移动。