Как исправить «[Lp002]: перемещение не удалось с помощью инструментов IAR ARM? - PullRequest
1 голос
/ 30 июля 2009

Я создал небольшой модуль на ассемблере для ARM, чтобы связать его с моим встроенным приложением из чистого металла. Иногда, когда я перестраиваю приложение, я получаю «Ошибка [Lp002]: перемещение не выполнено: значение вне диапазона или недопустимое». Еще более удивительным является то, что я получаю сообщение об ошибке после комментирования некоторого кода в модуле C.

В руководстве IAR неясно, «переупорядочен ли раздел или код». Но, глядя на файлы ассемблера, сгенерированные компилятором из моих файлов .c, я не вижу разницы между объявлением их раздела и моим. Я фактически начал свой код с того, что заглушил его в C, а затем взял собранный файл.

Ответы [ 3 ]

1 голос
/ 30 июля 2009

Всякий раз, когда я получаю какую-то загадочную ошибку компоновщика / компилятора, я делаю Rebuild All. Примерно в половине случаев это исправляет. Я предполагаю, что какой-то модуль должен был быть перекомпилирован, но не сделал этого.

Удачи.

0 голосов
/ 14 ноября 2009

Посмотрите в документации компилятора. Обычно есть раздел о командных файлах компоновщика, которые делают именно то, что вы ищете.

0 голосов
/ 20 августа 2009

Я нашел, что вызвало проблему, и как реализовать приемлемый обходной путь. В моем исходном коде на ассемблере были раздел с данными и код, и компоновщик размещал их слишком далеко друг от друга. Теперь я переместил свои переменные в раздел кода (который в любом случае был помещен в ОЗУ, потому что он должен был работать в контексте прерывания, когда я писал во внутреннюю флэш-память), и теперь я получаю его для правильной связи.

Это вопрос, который остается: как указать компоновщику разместить определенный раздел близко друг к другу?

...