2013-11-26 3 views
3

Я использую gcc для создания шестнадцатеричного файла с помощью микроконтроллера pic32, и мне нужно поместить слова конфигурации на специальные адреса памяти в программной вспышке.Раздел сценария компоновщика не отображается в ELF

Я использую этот простой компоновщика скрипт:

MEMORY { 
    boot_flash : ORIGIN = 0x1FC00000, LENGTH = 0xBF0 
    sfr :   ORIGIN = 0x1F800000, LENGTH = 0x100000 
    program_flash : ORIGIN = 0x1D000000, LENGTH = 0x20000 
    ram :   ORIGIN = 0x00000000, LENGTH = 0x8000 
    config0  : ORIGIN = 0xBFC02FFC, LENGTH = 0x4 
    config1  : ORIGIN = 0xBFC02FF8, LENGTH = 0x4 
    config2  : ORIGIN = 0xBFC02FF4, LENGTH = 0x4 
    config3  : ORIGIN = 0xBFC02FF0, LENGTH = 0x4 
} 

SECTIONS { 
    .text : { 
     *(.text) 
    } >boot_flash 
    .text : { 
     *(.text) 
    } >program_flash 
    .bss : { 
     *(.bss) 
    } >ram 
    .data : { 
     *(.data) 
    } >ram 

    .config0 : { 
     *(.config0) 
    } >config0 
    .config1 : { 
     *(.config1) 
    } >config1 
    .config2 : { 
     *(.config2) 
    } >config2 
    .config3 : { 
     *(.config3) 
    } >config3 
} 

Затем я скомпилировать этот простой код:

... 
uint32_t config0 __attribute__ ((section(".config0"))) = 0xFFFFFFFF; 
uint32_t config1 __attribute__ ((section(".config1"))) = 0xFFFFAF0F; 
uint32_t config2 __attribute__ ((section(".config2"))) = 0xFFFFFDFF; 
uint32_t config3 __attribute__ ((section(".config3"))) = 0xFFFFFDFF; 
... 

я, наконец, проверить с mips-elf-objdump полученный ELF файл. Код и данные в порядке, но в выводе ELF нет .config.

Что я делаю неправильно?

ответ

0

Попробуйте добавить некоторый код где-нибудь в приложении, чтобы ссылаться на элементы конфигурации, например:

volatile uint32_t dummy; 
dummy = config0; 
dummy = config1; 
dummy = config2; 
dummy = config3; 

Вы можете обнаружить, что линкер был отбрасывая их, потому что они не ссылаются - Вы можете сказать, компоновщик не отбрасывать неиспользуемые символы, но у меня были проблемы с последними версиями, причем разделы отбрасывались независимо.

+0

С вашим решением компилятор генерирует код для доступа к переменным, но не определяет раздел ELF: 'dummy = config0;' генерирует следующий код MIPS в разделе .text': 'lui v0, 0xbfc0; lw v0,12284 (v0); sw v0,28 (gp) ': -/Спасибо. – avelinoherrera

1

Код в порядке. Проблема была на mips-elf-objdump: я использовал ее с опцией -d, которая не показывает мне другие секции ELF: -/

Прошу прощения и благодарю вас за помощь! :-)

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