Двоичный файл, созданный MSP430GCC, имеет странный начальный адрес для текстового сегмента.
После компиляции примерной программы на C с msp430-gcc (LTS 20120406 не исправлен) для MSPG2211 я получил следующий вывод с помощью команды readelf:
заголовок раздела
заголовок программы
Адресное пространство микроконтроллера MSPG2211 имеет следующую структуру:
0x0000 - 0x01FF - Периферийные устройства
0x0200 - 0x027F - ОЗУ
0x1000 - 0x10FF - Flash (информационная память)
0x1100 - 0xF7FF -???
0xF800 - 0xFFFF - Flash (память кода + векторы прерываний)
Текстовый раздел, показанный в заголовке раздела, начинается с 0xF800, который является первым адресом памяти кода.
Текстовый сегмент, включающий только текстовый раздел, больше текстового раздела и начинается уже с 0xF76C.
Как я понял, загружаемые сегменты загружаются по указанным физическим адресам для выполнения программы.
Так почему начальный адрес текстового сегмента находится в неопределенной области памяти?
1 ответ
Некоторые из разделов имен (например, .text
) содержат данные, которые фактически загружаются в MCU.
Однако заголовки программы ELF содержат только метаданные; их адрес не имеет значения.