Как исправить ошибку [Lp002]: перемещение не удалось с помощью инструментов IAR ARM?

StackOverflow https://stackoverflow.com/questions/1208312

Вопрос

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

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

Это было полезно?

Решение 2

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

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

Другие советы

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

Удачи.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top