我试图将为arm926ejs编写的简单RTOS移植到arm cortex-A9。在引用上下文切换时,我遇到了以下说明,
_userIntrStackPtr:
.word 0x0
STR sp,_userIntrStackPtr
LDR r0,__userStackPtr2Ptr
但是,当我尝试编译代码时,我收到错误
Error: internal_relocation (type: OFFSET_IMM) not fixed up
有人可以解释一下上述说明吗?此外,当我提到其他代码时,我看到类似的指令,如
LDR r0,=__userStackPtr2Ptr
这两种方法有什么区别?如何使用str和ldr指令使用这些标签? 我不喜欢集会。请帮忙..
答案 0 :(得分:2)
指令的给定形式使用PC相对寻址,并且一些汇编器可能对它们施加限制,例如符号必须在相同的部分中,因此偏移是已知的。如上所示的上述代码与gnu汇编程序2.24.51.20131021组合在一起。我猜你没有提供实际的MCVE。
对于问题的第二部分:=
加载地址,因此您需要另一个LDR
/ STR
来执行内存操作。例如:
LDR r0, =_userIntrStackPtr
STR sp, [r0]
LDR r0, =__userStackPtr2Ptr
LDR r0, [r0]