
- •Ввод-вывод на уровне технических средств компьютера. Программируемы ввол-вывод. Фрагмент программы управления скоростью двигателя. Пояснения
- •Прямой доступ к памяти (пдп – dma). Компоновка схемы пдп с использованием внешнего контроллера. Временная диаграмма пдп. Пояснения.
- •Побитное отображение устройств. Побитая карта устройств ввода-вывода в управляющем слове для выделенной памяти. Рисунок, пояснения
- •Обработка прерываний на уровне технических средств компьютера. Основные понятия и определения. Поддержка прерываний командами процессора.
- •Процесс обработки прерываний в системе с единственным прерыванием. Рисунок, пояснения.
- •Программируемый контроллер прерываний. Назначение. Рисунок, пояснение.
- •Обработка нескольких прерываний с использованием внешнего контроллера прерываний. Рисунок, пояснения. Фрагмент кода обслуживания на псевдоассемблере для 2х адресной архитектуры.
- •Согласование устройство и цп с помощью прерываний. Контроллер единственного периферийного устройства. Рисунок, пояснения.
- •Согласований устройство и ца с помощью прерываний. Несколько контроллеров соединенные с цп через пкп (программируемый контроллер прерываний)
- •Прерываемые инструкции. Сторожевые таймеры (Watchdog Timers)
- •Основы разработки встроенных систем. Типовая среда разработки с использованием кросс-платформы. Рисунок, пояснения.
- •Обзор компоновщиков и процесса компоновки. Создание файла образа для целевой системы. Рисунок, пояснения.
- •Основные функции компоновщика. Взаимосвязь между таблицей символов и таблицей перемещений (переадресации). Рисунок, пояснения.
- •Форматы исполняемых и компонуемых файлов. Рисунок, пояснения.
- •Форматы исполняемых и компонуемых файлов. Раздел заголовка и заголовок программы. Листинг, таблица типов разделов, пояснения.
- •Размещение исполняемых образов в памяти целевой встроенной системы. Командный файл компоновщика. Упрощенная схема и карта памяти целевой системы. Рисунок, пояснения.
- •Директивы компоновщика section и memory. Форматы директив, примеры использования
- •Инициализация встроенной системы. Общие положения.
- •Инструменты целевой системы передача образа. Общий вид целевой встроенной системы, размещенной на плате.
- •Встроенный загрузчик.
- •Встроенный монитор и целевое средство отладки.
- •Последовательность загрузки и выполнения образа после его перемещения из пзу в озу. Рисунок, пояснения
- •Последовательность загрузки и выполнения образа из озу после его передачи из хост системы. Рисунок, пояснения.
- •Инициализация программного обеспечения целевой системы. Программные компоненты целевой системы. Рисунок, пояснения.
- •Процесс инициализации программного обеспечения. Рисунок, пояснения.
- •Инициализация ос рв целевой системы.
- •Внутрисхемная отладка (отладка на чипе) целевой системы.
Форматы исполняемых и компонуемых файлов. Раздел заголовка и заголовок программы. Листинг, таблица типов разделов, пояснения.
Листинг 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.
Размещение исполняемых образов в памяти целевой встроенной системы. Командный файл компоновщика. Упрощенная схема и карта памяти целевой системы. Рисунок, пояснения.
Директивы компоновщика 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
}
Объединение входных секций в исполняемом образе. Листинг, рисунок, пояснения.
Рис 12.2 Объединение входных секций в исполняемом образе
Листинг 12.3 Код примера.
SECTION {
.text :
{
my_section
*(.text)
}
loader : > FLASH
GROUP ALIGN (4) :
{
.text,
.data : {}
.bss : {}
} >RAM
}
Размещение исполняемого образа в памяти целевой системы. Листинг, рисунок, пояснения.
Рис 12.3 Размещение исполняемого образа вцелевой системе
Собственные секции разработчика встроенных систем и причины их определения.
Размещение исполняемых образов, практический пример: таблица секций встраиваемого приложения, листинг возможного размещение секций, рисунок размещения исполняемого образа в целевой системе. Пояснения.
Практический пример. Рассмотрим пример системы содержащей 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, единственный физический модуль памяти, где могут разместиться все эти большие секции.