【发布时间】:2014-09-24 09:27:50
【问题描述】:
我有一个简单的裸机 Raspberry Pi 项目,我正在尝试在其中实现自旋锁。这是我的代码:
spinlock_lock:
push {r4, r5, lr}
mov r5, #0x1
1:
ldrex r4, [r0]
teq r4, #0
strexeq r4, r5, [r0]
teqeq r4, #0
bne 1b
pop {r4, r5, pc}
问题是ldrex 导致数据中止。我传递的指针是页面对齐的,并且 ARM 在系统模式下运行。奇怪的是,用使用非独占加载/存储的版本替换此代码,它可以工作。使用独占加载和存储时有什么需要注意的吗?
【问题讨论】:
-
MMU 是否开启,如果开启,该页面映射为什么内存类型?
-
@Notlikethat 没有虚拟内存在,都是物理地址。
标签: assembly arm raspberry-pi