Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Романов.Модуль2.docx
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
1.88 Mб
Скачать
  1. Форматы исполняемых и компонуемых файлов. Раздел заголовка и заголовок программы. Листинг, таблица типов разделов, пояснения.

Листинг 11.1 показывает, как заголовок раздела и заголовок программы, представленные в структурах Си. Соответствующие области будут описаны далее.

Таблице раздела хедер массив, раздел хедер структуры, описывающий разделы объектных файлов. Таблице заголовок программы является массивом хедеров программы структур, описывающих загружаемый сегмент изображения, что позволяет погрузчик для подготовки изображений для исполнения. Хедер программы применяются только к исполняемым образам и общим файлам объекта.

Одно из полей в структуре хедера раздела sh_type, который указывает тип раздела.

В некоторых системах созданы разделы по умолчанию: .text, .sdata, .data, .sbss, and .bss. Программный код и константы находятся в секции .text. Разделы .sbss и .bss содержат неинициализированные данные. Разделы .sbss содержит данные с маленьким размером такие как переменные входящие в определённый диапазон значений. Результатом есть то, что компилятор и компоновщик могут создавать более эффективный код для доступа к данным. Разделы .sdata и .data содержат инициализированные данные. Раздел .text с выполняемым кодом имеет атрибут EXECINSTR. Разделы .sdata и .data имеют атрибут WRITE. Разделы .sbss и .bss имеют атрибуты WRITE и ALLOC.

  1. Размещение исполняемых образов в памяти целевой встроенной системы. Командный файл компоновщика. Упрощенная схема и карта памяти целевой системы. Рисунок, пояснения.

  1. Директивы компоновщика section и memory. Форматы директив, примеры использования

Директива MEMORY определяет типы физической памяти, которые доступны в целевой системе и диапазон адресов, которые заняты каждым физическим блоком памяти, что представлено следующим обобщенным синтаксисом:

MEMORY {

area-name : org = start-address, len = number-of-bytes

}

В примере, показанном на Рисунке 12.1, существуют адресные пространства трех физических блоков памяти:

 адресное пространство чипа ПЗУ (ROM), настроенное с нулевого адреса, размером в 32 байта,

 адресное пространство флеш-памяти (FLASH), настроенное с адреса 0x40, размером в 4,096 байт, и

 блок ОЗУ (RAM) объемом 65,536 байт, адреса котрого начинаются с 0x10000.

Представление такого распределения памяти (карта памяти) директивой MEMORY показано в Листинге 12.1. Именованные зоны: ROM, FLASH и RAM.

Листинг 12.1 Карта памяти

MEMORY {

ROM: origin = 0x0000h, length = 0x0020h

FLASH: origin = 0x0040h, length = 0x1000h

RAM: origin = 0x1000h, length = 0x10000h

}

Директива SECTION задает компоновщику следующую информацию: какие входные секции должны быть объединены, в какую выходную секцию; какие выходные секции должны быть сгруппированы вместе и размещены последовательно в памяти; где поместить каждую секцию; а также другую информацию. Общий формат директивы SECTION показан в Листинге 12.2.

Листинг 12.2 Директива SECTION.

SECTION {

output-section-name : { contents } > area-name

GROUP {

[ALIGN(expression)]

section-definition

} > area-name

}

  1. Объединение входных секций в исполняемом образе. Листинг, рисунок, пояснения.

Рис 12.2 Объединение входных секций в исполняемом образе

Листинг 12.3 Код примера.

SECTION {

.text :

{

my_section

*(.text)

}

loader : > FLASH

GROUP ALIGN (4) :

{

.text,

.data : {}

.bss : {}

} >RAM

}

  1. Размещение исполняемого образа в памяти целевой системы. Листинг, рисунок, пояснения.

Рис 12.3 Размещение исполняемого образа вцелевой системе

  1. Собственные секции разработчика встроенных систем и причины их определения.

  1. Размещение исполняемых образов, практический пример: таблица секций встраиваемого приложения, листинг возможного размещение секций, рисунок размещения исполняемого образа в целевой системе. Пояснения.

Практический пример. Рассмотрим пример системы содержащей 256 байт в ПЗУ (ROM) , 16 Кб флеш- памяти (FLASH) и 2 блока ОЗУ (RAMB0 и RAMB1). Первый блок RAMB0 – это 128 Кб SDRAM, второй RAMB1 – 2 Мб DRAM. Приложение для встроенной системы с определенным количеством секций, которые представлены в Таблице 13.1, нужно разместить в целевой системе.

Одно из возможных размещений исполняемого образа в целевой системе показано в Листинге 13.1. Оно учитывает особенности, по которым инженер по встроенным системам должен разместить соответствующие секции в доступных физических блоках памяти системы.

Листинг 13.1 Возможное размещение секций

MEMORY {ROM: origin = 0x00000h, length = 0x000100h

FLASH: origin = 0x00110h, length = 0x004000h

RAMB0: origin = 0x05000h, length = 0x020000h

RAMB1: origin = 0x25000h, length = 0x200000h

}

SECTION {

.rodata : > ROM

_loader : > FLASH

_wflash : > FLASH

_monitor : > RAMB0

.sbss (ALIGN 4) : > RAMB0

.sdata (ALIGN 4) : > RAMB0

.text : > RAMB1

.bss (ALIGN 4) : > RAMB1

.data (ALIGN 4) : > RAMB1

}

Продолжение ->

Краткое описание секций исполняемого образа

 Секция .rodata содержит параметры инициализации системы. Предположительно, значения по умолчанию никогда не меняются, следовательно, эту секцию можно разместить в ПЗУ.

 Загрузчик – это обычно та часть программы, которая выполняется при загрузке исполняемого образа. Поскольку код загрузчика может быть обновлен на более новые версии, которые различают больше форматов объектных файлов, секции_loader и _wflash размещены во флеш-памяти. Для обновления понадобится программатор флеш-памяти, который также может быть обновлен.

Следовательно, секцию _wflash тоже следует разместить во флеш-памяти. Программист встроенной системы взаимодействует с монитором для получения данных о состоянии работы системы и облегчения отладки кода приложения; следовательно, монитор должен реагировать на команды пользователя. SDRAM быстрее DRAM, у нее меньшее время доступа. Поэтому секцию _monitor следует разместить в RAMB0.

 В RAMB0 по-прежнему достаточно места, чтобы разместить обе секции .sbss и .sdata. Стратегия размещения для этих двух секций – использовать оставшуюся память полностью.

 Оставшиеся секции (.text, .bss и .data) размещаются в RAMB1, единственный физический модуль памяти, где могут разместиться все эти большие секции.