Линкер: как разместить блок данных на определенной границе адреса - PullRequest
1 голос
/ 13 октября 2011

Это может быть простой вопрос, но я новичок с файлом компоновщика GNU GCC (codeourcery arm-none-eabi ver 4.5.2).

Мне нужно инициализировать Mmu в процессоре ARM7и в таблице говорится, что таблица страниц Mmu должна быть расположена на границе 16 Кбайт (2 ^ 14).

Пока я пришел с этим решением, но я почти уверен, что это не такболее эффективный!

ENTRY(_start)

SECTIONS
{
 . = 0x0;
 .text : {_stext = .;
*startall.o (.text)
. = 0x4000;
*MmuSdram0.o (.text)
*(.text)
_etext = .;}
 .data : {_sdata = .;
*(.data) 
_edata = .;}
 .bss : {_sbss = .;
*(.bss) 
_ebss = .;}
}

startall.o - это файл сборки, содержащий инициализацию процессора.
В следующей строке я установил адрес 0x4000 (граница 2 ^ 14).
MmuSdram0.o содержит таблицу страниц Mmu.
Затем следуйте остальной части прошивки.
Очевидно, что это решение дает мне промежуток между концом startall и 0x4000, что приводит к пустой трате памяти (мне не нравитсярастрата ;-)

Вместо этого я бы поставила таблицу страниц после * (. text), но я не знаю, как сделать что-то вроде:
* (. text) «кроме» MmuSdram0.o
И я предпочитаю, чтобы компоновщик рзамените таблицу страниц на следующей доступной границе 2 ^ 14 вместо того, чтобы фиксировать адрес самостоятельно.Я проверил документацию по компоновщику, нашел команду ALIGN, но я не уверен, как правильно ее использовать или даже если это команда, которая мне подходит ...

Заранее спасибо!

1 Ответ

0 голосов
/ 18 октября 2011

хм, поместите __attribute__ (( aligned(16*1024) )) перед точкой с запятой ';' вашей таблицы объявлений MMU

...