exception - 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
。
解决方案
推荐阅读
- c++ - 如何从相机中读取 16 位有符号整数?
- elasticsearch - 带有通配符的 Elasticsearch minhash 前缀查询?
- javascript - Add Animation/Transition to Element When Removed From DOM
- c# - 获取 processid 时出现错误 IndexOutOfRange
- python - 有没有找到由当前单元格值定义的最后一行的最佳方法?
- swift - min 和 fmin 之间的差异
- python - 为什么捕获的 sys.exit() 代码与提供的不同?
- javascript - 如何通过 Google 进行身份验证并重定向到 Cordova 应用程序?
- typescript - VSCode 调试器和 Typescript:Step Over/Into 转到 JS 文件
- json - 如何避免在 Sequel 中序列化 postgres json 结果