【发布时间】:2013-09-17 11:33:48
【问题描述】:
我在uboot里看下面的序列
.globl _start
_start: b reset
ldr pc, _undefined_instruction
ldr pc, _software_interrupt
ldr pc, _prefetch_abort
ldr pc, _data_abort
ldr pc, _not_used
ldr pc, _irq
ldr pc, _fiq
#ifdef CONFIG_SPL_BUILD
_undefined_instruction: .word _undefined_instruction
_software_interrupt: .word _software_interrupt
_prefetch_abort: .word _prefetch_abort
_data_abort: .word _data_abort
_not_used: .word _not_used
_irq: .word _irq
_fiq: .word _fiq
_pad: .word 0x12345678 /* now 16*4=64 */
#else
_undefined_instruction: .word undefined_instruction
_software_interrupt: .word software_interrupt
_prefetch_abort: .word prefetch_abort
_data_abort: .word data_abort
_not_used: .word not_used
_irq: .word irq
_fiq: .word fiq
_pad: .word 0x12345678 /* now 16*4=64 */
#endif /* CONFIG_SPL_BUILD */
现在如果有 IRQ 或 FIQ 核心将分支到 _irq,但在一种情况下它会找到 _irq : .word _irq,这是什么意思?
_irq 的地址是 ARM 中的有效指令吗? 这个我看不懂,谁能解释一下?
【问题讨论】:
-
这只是一个中断向量表,不是可执行代码。
-
在中断时将使用此向量表。还看到table的#if部分有一个分支
-
"ldr pc, _irq" : 用 addr _irq 中的值加载 pc 和 "_irq: .word irq" : 在 addr _irq 有值 irq,它是 irq 例程的函数指针.因此,当 irq 发生时,pc 会跳转到 irq 例程。只是为了写下我的理解。