Миро Самек. Построение простых систем на ARM-контроллерах с использованием инструментов GNU (перевод)
- переводы |
- Miro Samek |
- GNU |
- Bare-Metal |
- arm
Миро Самек
Построение простых систем на ARM-контроллерах с использованием инструментов GNU
Содержание
-
Часть 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.1 Стартовый код
2.2 Низкоуровневая инициализаци
-
Часть 3
3.1 Управляющий файл компоновщика
-
Часть 4
4.1 Опции компилятора для языка "Си"
4.2 Опции компилятора для C++
4.3 Сокращение избыточного кода в C++
-
Часть 5
5.1 Компиляция под ARM/THUMB набор инструкций
5.2 Размещение кода в оперативной памяти (RAM)
-
Часть 6
6.1 Обработка прерываний - описание проблемы
6.2 Стратегия обработки прерываний
6.3 Обработка FIQ
6.4 Отсутствие автовекторизации
-
Часть 7
7.1 Блокировка прерываний - описание проблемы
7.2 Стратегия сохранения и восстановления состояния системы прерываний
7.3 Реализация критических секций с помощью GNU gcc
7.4 Разбор реализации критических секций
-
Часть 8
8.1 Оболочка обработчика IRQ "ARM_irq()"
8.2 Оболочка обработчика FIQ "ARM_fiq()"
-
Часть 9.
9.1 Функция обработчика "BSP_irq()"
9.2 Функция обработчика "BSP_fiq()"
9.3 Подпрограммы обработки прерываний
9.4 Инициализация таблицы векторов и контроллера прерываний
9.5 Обработчики для остальных исключений
-
Часть 10 - Стратегии отладки
10.1 Учебный проект "Blinky"
10.2 Проверка вариантов перехвата управления при прерываниях в ручном режиме
-
Заключение
- 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++.
- блог пользователя teap0t
- 151845 просмотров
Новые записи в блогах
- Устранение дребезга контактов на основе вертикальных счетчиков
- Диагностика Imprecise Bus Faults в микроконтроллерах Cortex-M3/M4/M4F
- Self-powered камера
- Фоновый модулятор: беспроводная связь из ничего (перевод)
- Texas Instruments Analog Applications Journal SLYT612 "Снижение искажений в аналоговых КМОП ключах" (перевод)
- USB MSD. Часть 6. Команды SCSI (перевод)
- USB MSD. Часть 3. USB класс накопителей данных (перевод)
- Texas Instruments Application Report SBAA042 "Кодовые схемы, используемые в аналогово-цифровых преобразователях" (перевод)
- 10 принципов правильного интерфейса
- Релиз SDK на русский микропроцессор КРОЛИК
Recent comments
1 неделя 18 часов назад
1 неделя 3 дня назад
5 недель 5 часов назад
7 недель 20 часов назад
9 недель 5 дней назад
12 недель 5 дней назад
12 недель 6 дней назад
16 недель 4 дня назад
17 недель 5 дней назад
6 лет 3 недели назад