Язык Ada на Atmel SAM4 (Cortex-M) - быстрый старт [Евгений Турышев] (fb2) читать постранично, страница - 2


 [Настройки текста]  [Cбросить фильтры]

назначения LED0, светодиод RESET, светодиод POWER, светодиод STATUS (моргание которого показывает интенсивность обмена по DEBUG USB). Разъём USB для питания и отладки — DEBUG USB, разъём USB общего назначения SAM4S USB, разъём для внешнего LCD — LCD CONNECTOR, три разъёма для плат расширения.



На обратной стороне платы размещён также разъём кардридера SD-Card и чип отладчика EDBG.

Плата может быть запитана подключением USB-кабеля к разъёму DEBUG USB и с другой стороны к источнику питания USB или компьютеру. Также есть отдельный четырёхштырьковый разъём питания. После включения и сброса процессор запускает программу из флэш, если там что-то прошито.

Немаловажной деталью устройства является чип «The Atmel Embedded Debugger (EDBG)» установленный на обратной стороне платы и подключенный к разъёму DEBUG USB. Будучи соединённым через последовательные каналы TWI, SPI, UART с процессором, он позволяет выполнять отладку приложения используя протокол OpenOCD (Open On-Chip Debugger).

Кроме того, EDBG создаёт на хост-компьютере виртуальный ком-порт Virtual COM Port, который может служить приложению в качестве стандартного ввода вывода.

Подробнее см.

SAM4S Datasheet

SAM4S Xplained Pro User Guide

Atmel Embedded Debugger User Guide

SAM4S ARM Cortex-M4 Microcontrollers

Плата Oled1


Содержит LCD-дисплей, размером 128×32 пикселя, три кнопки (BUTTON 1 .. BUTTON 3) и три светодиода (LED1 .. LED3). В примерах подключается к разъёму расширения EXT3.

OLED1 Xplained Pro User Guide

Плата IO1


Содержит фотодиод, датчик температуры и кардридер MicroSD.

IO1 Xplained Pro User Guide

Плата PROTO1


Небольшая макетная плата расширения для сборки своего устройства.

Также в комплект входят два USB-кабеля.

2. Организация среды разработки

Много лет я являюсь пользователем ОС Linux, как для профессиональной работы, так и в домашних целях. Поэтому все дальнейшее также проделывалось в Linux (Fedora Core 21).

В качестве среды разработки я использую редактор emacs, для которого существует модуль ada-mode поддерживающий редактирование исходного кода Ada, навигацию по коду, вызов компилятора, переход на ошибки, и др. что обычно требуется разработчику. Поэтому все проекты содержат файлы proj.adp, которые служат в качестве простенького файла проекта для библиотеки ada-mode.

Необходимые пакеты

С сайта компании AdaCore скачиваем бинарную версию компилятора: gnat-gpl-2015-arm-elf-linux-bin

исходные коды GNAT:

gnat-gpl-2015-src

исходные коды компилятора gcc:

gcc-4.9-gpl-2015-src

и исходные файлы для сборки runtime-библиотек (для «голого железа» — Bare Boards — устройств без ОС):

bb-runtimes-gpl-2015-src

Компилятор устанавливаем в каталог /usr/gnat (там же у меня установлен и native-компилятор для x86 — gnat-gpl-2015-x86_64-linux-bin), для этого достаточно запустить в его каталоге скрипт./doinstall.

Сборка ZFP

Далее собираем runtime-библиотеку для нашей платформы.

Здесь необходимо пояснить, что для GNAT существует понятие «профиля компилятора», которое описывает совокупность доступных средств языка, функциональность и объём runtime-библиотеки.

По степени увеличения функциональности существуют предопределённые профили Zero Footprint Profile (ZFP), Cert Profile, Ravenscar Profiles (два варианта профиля — sfp и full), Full Ada Language Support.

Основной мотивацией существования профилей AdaCore называет лёгкость и снижение цены сертификации приложения на соответствие требованиям надёжности и безопасности при использовании ограниченного профиля. Подробнее здесь.

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

Для процессора sam4s официально поддерживается только один профиль — Zero Footprint Profile (ZFP). Это наиболее ограниченная версия языка, из которой исключено всё, что касается динамической семантики.

В частности исключены все средства поддержки многозадачности, как task и protected objects. Поэтому этот рантайм позволяет разрабатывать только однозадачные приложение. Но, даже в случае однозадачной программы, обмен с устройствами по прерыванием создаёт подобие многозадачной среды.

Кроме, того есть ограничения на обработку исключений (допустимы только локальные обработчики), отсутствуют контролируемые типы, полный список можно узнать заглянув в