Миро Самек. Построение простых систем на ARM-контроллерах с использованием инструментов GNU (перевод)

Миро Самек

Построение простых систем на ARM-контроллерах с использованием инструментов GNU

Содержание


  1. Часть 1
    1.1 Что нужно простому проекту на ARM
    1.2 Поддержка переадресации векторов прерываний
    1.3 Низкоуровневая инициализация на языке C/C++
    1.4 Исполнение кода из оперативной памяти
    1.5 Совместное использование инструкций ARM и THUMB
    1.6 Раздельные секции стека
    1.7 Отладочная и выходная конфигурации
    1.8 Поддержка C++
    1.9 Сокращение издержек C++
    1.10 Обработка исключений и прерываний ARM
     
  2. Часть 2
    2.1 Стартовый код
    2.2 Низкоуровневая инициализаци
     
  3. Часть 3
    3.1 Управляющий файл компоновщика
     
  4. Часть 4
    4.1 Опции компилятора для языка "Си"
    4.2 Опции компилятора для C++
    4.3 Сокращение избыточного кода в C++
     
  5. Часть 5
    5.1 Компиляция под ARM/THUMB набор инструкций
    5.2 Размещение кода в оперативной памяти (RAM)
     
  6. Часть 6
    6.1 Обработка прерываний - описание проблемы
    6.2 Стратегия обработки прерываний
    6.3 Обработка FIQ
    6.4 Отсутствие автовекторизации
     
  7. Часть 7
    7.1 Блокировка прерываний - описание проблемы
    7.2 Стратегия сохранения и восстановления состояния системы прерываний
    7.3 Реализация критических секций с помощью GNU gcc
    7.4 Разбор реализации критических секций
     
  8. Часть 8
    8.1 Оболочка обработчика IRQ "ARM_irq()"
    8.2 Оболочка обработчика FIQ "ARM_fiq()"
     
  9. Часть 9.
    9.1 Функция обработчика "BSP_irq()"
    9.2 Функция обработчика "BSP_fiq()"
    9.3 Подпрограммы обработки прерываний
    9.4 Инициализация таблицы векторов и контроллера прерываний
    9.5 Обработчики для остальных исключений
     
  10. Часть 10 - Стратегии отладки
    10.1 Учебный проект "Blinky"
    10.2 Проверка вариантов перехвата управления при прерываниях в ручном режиме
     
  11. Заключение
     
  12. References 

Широко распространённое семейство процессоров ARM хорошо поддержано набором инструментов GNU C/C++. Большинство сетевых ресурсов и печатных материалов [1, 2] сосредотачивается на процедуре сборки и установки инструментария GNU, найти же подробные примеры использования компиляторов GNU C/C++ в приложении к простым программно-аппаратным системам, обладающими всеми основными возможностями нужными для повседневной жизни, весьма сложно.

И даже если вы такой пример найдёте, то, скорее всего, не сможете узнать ПОЧЕМУ всё сделано имеенно так, а не иначе.

В данной статье вы познакомитесь со всеми элементами, необходимыми для построения и тонкой настройки простых проектов на ARM-контроллерах с использованием набора инструментов GNU.

Знакомство начнётся с перечисления возможностей процессора ARM, необходимых в повседневной жизни. Затем будет описан универсальный стартовый код, управляющий файл компоновщика, низкоуровневая инициализация, опции компилятора и базовое программное обеспечение для работы с отладочной платой (board support package - BSP). После этого будет показано как инициализировать систему на языке C++ и как уменьшить избыточность его кода, для использования в системах начального уровня.

Затем будет описана техника обработки прерываний для простых программных конструкций с приоритетной и фоновой задачами. Будут описаны принципы блокировки и обработки прерываний с использованием приоритетного контроллера, ассемблерные функции-оболочки для обработчиков IRQ, FIQ и других исключений ARM. В завершении будут приведены способы проверки для различных вариантов передачи управления при прерываниях.

Материал статьи основан на инструментах "CodeSourcery G++ GNU" для ARM [3] и отладочной плате AT91SAM7S-EK фирмы Atmel, содержащей контроллер AT91SAM7S64 (64KB программной и 16KB оперативной памяти).

Обсуждаемая тема может использоваться и для других инструментальных наборов GNU для ARM [4, 5], а также других моделей ARM процессоров - ARM7 и ARM9. Для демонстрации особенностей C++ статью сопровождают самостоятельные проекты на языках "Си" и C++.

ПредпросмотрAttachmentSize
bare_metal_arm_systems_html.zip327.73 КБ
blinky_files.zip173.94 КБ