2016-02-05 1 views
-1

У меня есть простой узел, который генерировал следующее сообщение об ошибкеОшибка рукоятки A1174E: смещение передачи данных 0x00002000 вне диапазона. Допустимые значения 0xFFFFF001 для 0x00000FFF

Assembly

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>? И где он установлен? Могу ли я это контролировать.

+0

Они являются заполнителями для действительных значений, замененных в сообщении об ошибке. В вашем случае '0x ' заменяется на '0xFFFFFF01', а' 0x 'заменяется на' 0x00000FFF'. Вы можете изменить эти значения, это ограничение архитектуры ARM. Вам нужно будет переписать инструкцию сборки. –

+0

@RossRidge Где я могу установить их в своей программе? Есть ли какая-либо документация об этом. Кажется, я не могу найти ничего полезного. – rockstar

+0

Извините, я хотел сказать, что вы не можете их изменить. –

ответ

2

Это ограничение набора инструкций ARM. Per 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] 
Смежные вопросы