2013-07-12 7 views
0

Я разочарован, потому что не могу найти информацию о сегментации памяти. Я знаю, что я должен разделить память на основные разделы, такие как .text, .data, .bss, .stack, которые используются в объектных файлах скомпилированной программы. Я знаю, что есть еще много других разделов, некоторые из них необходимы для C и других для C++. Я ищу информацию о том, какие разделы должны быть включены в скрипт компоновщика?Секции памяти в скрипте компоновщика GNU для Cortex-M4

ответ

2

Это зависит от вашего конкретного компилятора и целевой архитектуры, выходные секции которых будут присутствовать или, возможно, присутствовать. И в вашем коде вы можете определить секции ввода с произвольными именами. Ваш скрипт компоновщика служит для привязки символов из файлов или символов, перечисленных в явно определенных разделах ввода, к выходным разделам.

Лучший способ узнать, какие выходные секции присутствуют, состоит в том, чтобы просто скомпилировать и связать пример приложения и проверить сгенерированный файл карты (если файл карты не создается автоматически, вы должны настроить параметры компоновщика). Файл карты не предназначен для потребления другим инструментом, но служит читаемым описанием того, что входит в вашу программу, в каком месте, в каком разделе и почему. Примечание: в этом файле карты вы также найдете имена разделов, которые не являются частью вашей программы, и не будут переводить на физические биты, которые выполняются или используются вашей программой, но являются скорее вспомогательными средствами для вашего отладчика.

Если вы явно не отобразите некоторые символы в выходной раздел, компоновщик, как правило, просто добавит все оставшиеся символы после последнего явно определенного раздела.

Таким образом, вы также можете определить какой-то раздел «catch-all», который наверняка привлечет все еще не назначенные символы, а затем проверит, остается ли раздел вывода пустым. т.е.

В конце вашего УЧАСТКОВ блока, добавить

SECTION 
{ 
    <snip> 

    .mustbeempty 
    { 
    *(.*) ; 
    } 
    ASSERT(SIZEOF(.mustbeempty) = 0) ; 
} 

Более подробную информацию о компоновщике сценариях можно найти во многих местах:

+0

+1 Не могли бы вы расширить свой ответ? Кроме того, есть ли у вас какие-либо ссылки для получения дополнительной информации о скриптах-линкерах? Благодарю. – Sabuncu

+0

См. Также здесь: http://stackoverflow.com/q/12763041/911550 – parvus