机械臂错误A1174E:数据传输偏移0x00002000超出范围。允许的值为0xFFFFF001到0x00000FFF

时间:2016-02-05 05:25:05

标签: assembly arm keil

我有一个简单的程序集,它会产生以下错误

汇编

LDR r14,[r12,#0x00002000]

错误

testspeed.s(23): error: A1174E: Data transfer offset 0x00002000 out of range.  Permitted values are 0xFFFFFF01 to 0x00000FFF

抬头看ARM guide我看到错误的原因

 A1174E: Data transfer offset 0x<val> out of range. Permitted values are 0x<mini> to 0x<maxi>

任何人都知道这是0x<mini>0x<maxi>是什么?它在哪里设置?我能控制它吗?

1 个答案:

答案 0 :(得分:2)

这是ARM指令集的限制。每the documentation

Instruction           Immediate offset     Pre-indexed      Post-indexed     Arch.
ARM, word or byte [1] -4095 to 4095        -4095 to 4095    -4095 to 4095    All 

(由于某种原因,文档中缺少减号。)

您的偏移太大而无法立即使用。你必须提出一些其他方法来访问内存,比如将它分解为两个指令。

ADD r14, r12, #0x00002000
LDR r14, [r14]