У меня была похожая проблема сегодня, когда я писал процедуру сборки для процессора ARM Cortex-M0.В моем случае код, вызвавший ошибку, выглядел так:
ldr r7 ,=PRTCNFG_10
Это псевдоинструкция, заставляющая процессор загружать значение константы PRTCNFG_10 (определяемое с помощью директивы .equ) в регистр r7.Псевдоинструкция будет переведена в
ldr r7 ,[pc, #immed8]
, где # immed8 - это 8-битное непосредственное значение.Поскольку 2 ^ 8 = 256, определение PRTCNFG_10 нельзя размещать за пределами pc + 256 байт, в противном случае Ассемблер выдаст ошибку.
Я решил проблему, явно выделив PRTCNFG_10 в памяти:
PRTCNFG_10:
.word 0x606