首页 > 解决方案 > ARM - 异常中的链接寄存器

问题描述

我的树莓派有一个 IRQ 异常的代码:

push {r0-r12, lr}

mov r1, r11
str r1, [r0, #GPIO_EVT_STAT0]
ldr r5, =State
ldr r2, [r5]
tst r2, #0x01
streq r12, [r0, #GPIO_OUT_CLR0]
strne r12, [r0, #GPIO_OUT_SET0]
mvn r2, r2
str r2, [r5]

pop  {r0-r12, lr}
subs pc, lr, #0x04

ARM手册说,链接寄存器(r14)以不同的模式存储。所以我不必将链接寄存器推入堆栈。这个对吗?

当我尝试此代码时(与上面相同,但不推送链接寄存器)

push {r0-r12}

mov r1, r11
str r1, [r0, #GPIO_EVT_STAT0]
ldr r5, =State
ldr r2, [r5]
tst r2, #0x01
streq r12, [r0, #GPIO_OUT_CLR0]
strne r12, [r0, #GPIO_OUT_SET0]
mvn r2, r2
str r2, [r5]

pop  {r0-r12}
subs pc, lr_irq, #0x04

我在编译期间收到此错误:

source/main.s:121: Error: immediate expression requires a # prefix -- `subs pc,lr_irq,#0x04'

那么为什么我会收到这个错误呢?我的理解是 r14 存储在 IRQ 模式中,并且存储的寄存器可以通过符号访问register_mode

标签: exceptionassemblyarm

解决方案


推荐阅读