2015-12-03 3 views
-1

Я пишу код на языке сборки ARM на плате Freescale Freedom KL46Z в среде Keil uVision 5. Мой код довольно длинный, но в основной части кода, когда я пытаюсь загрузить (LDR) константу или переменную, я получаю эту ошибку: ошибка: A1284E: Литеральный пул слишком удален, используйте LTORG для его сборки в пределах 4KB Я понятия не имею, что это значит или как это исправить. Пункты, где происходят ошибки, находятся на одинаковых инструкциях. Например, первая ошибка на инструкции, которая гласит: LDR R1, = Время , где время определяется как: пространства-времени 4 Этот экземпляр был переменной, но это также происходит на определенных констант. Может ли кто-нибудь помочь мне выяснить, как исправить эту ошибку?Литературный бассейн слишком отдаленный?

+0

Можете ли вы опубликовать то, что у вас есть? – wogsland

+1

Когда сообщение об ошибке предлагает сделать что-нибудь, не могли бы вы сначала просмотреть [что это такое?] (Http://www.keil.com/support/man/docs/armasm/armasm_dom1361290018422.htm), чтобы узнать, проливает некоторый свет на проблему? – Notlikethat

+0

Я пробовал искать инструкцию LTORG, но я ничего не видел об этом не в исполняемых ares кода, как в приведенном ниже ответе. – programmr

ответ

1

Сообщение об ошибке объясняет более или менее то, что вам нужно сделать. Вставьте LTORG directive в код сборки где-нибудь в пределах 4096 байт строки с сообщением об ошибке. Оператор LTORG должен находиться в том же разделе, что и ваш код, и он не должен быть на пути кода, который может быть выполнен. Это приводит к вставке констант (литералов) в раздел, который приведет к сбою или иным образом плохого поведения при выполнении.

Хорошее место либо после окончания функции (или перед меткой записи функции), которая дает ошибку. Если это еще более 4K, вам нужно найти безусловную ветвь или команду возврата в своей функции, которую вы можете поместить после нее. Если такой инструкции нет, тогда вам нужно будет вставить инструкцию безусловного перехода, которая ничего не делает, кроме как перескакивает оператор LTORG где-то в вашем коде.

Смежные вопросы