Как правильно загрузить данные по конкретному адресу с помощью LD? - PullRequest
0 голосов
/ 02 апреля 2019

Я пытаюсь загрузить часть своего кода по определенному адресу сгенерированного ПЗУ с помощью LD.Размер ПЗУ установлен на 0x4000

. Я смешиваю код C и ASM, скомпилированный / собранный с GCC.Часть, которую я хочу связать по определенному адресу, находится в сборке.

Я прочитал руководство по LD и поэтому отредактировал часть SECTIONS моего сценария ссылки и добавил .section .assets в свой код asm.

Мой скрипт ссылки уже указал .text, .data, .bss и отлично работает.В разделе .text, в 0x2000, я хочу загрузить раздел .assets.

Я попробовал 3 способа сделать это

1 / выделенный раздел

.text { *(.text) } >ROM
.assets 0x2000 { *(.assets) }

, используянм, я видел, что мои константные данные определены как 0x2000, но на самом деле самих данных там нет ... адрес правильный, данные нулевые

  • PRO: четко установить, какой адрес раздела
  • PRO: универсальный
  • CON: не работает!

2 / необработанная загрузка

.text { *(.text) } >ROM
.assets 0x2000 { assets.o } >ROM

с использованием нм, адрес правильный и данныеприсутствует

  • CON: не универсальный, я должен перечислить каждый файл
  • CON: .assets в assets.asm ничего не значит
  • CON: не уверен .textразмер правильный

3 / внутри .text

.text
{
  *(.text)
  . = 0x2000;
  *(.assets)
}  >ROM

с использованием nm, адрес правильный и данные присутствуют

  • PRO: .text sizeправ
  • CON: не определяет, когда размер * (. text)> 0x2000

Так что, хотя у меня есть способ достичь того, чего я хочу, у меня есть чувствоэто не правильно.

Итак, какВы загружаете каждый (.assets) любого файла .o по определенному адресу ПЗУ, не нарушая размер раздела .text?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...