Я пытаюсь загрузить часть своего кода по определенному адресу сгенерированного ПЗУ с помощью 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?