Язык Ada на Atmel SAM4 (Cortex-M) - быстрый старт [Евгений Турышев] (fb2) читать постранично, страница - 3
[Настройки текста] [Cбросить фильтры]
bash$ export SOURCES=... # путь к бинарной версии компилятора bash$ export PATH=/usr/gnat/bin:$PATH bash$ export GNAT_SRC_DIR=$SOURCES/gnat-gpl-2015-src/src/ada/ bash$ export GCC_SRC_DIR=$SOURCES/gcc-4.9-gpl-2015-src bash$ cd $SOURCES/bb-runtimes-gpl-2015-src bash$ ./build-all.sh -g -v --no-link --target=sam4s zfp # --no-link — указывает, что все файлы нужно копировать, а не делать ссылки bash$ cp —R install /usr/gnat/arm-eabi/lib/gnat/zfp-sam4s # копирую в традиционное для рантайма место
На этом со сборкой библиотеки рантайма всё.
Отладчик и терминал
Помимо этого, нам понадобится openocd с помощью которого мы будем выполнять загрузку и отладку приложения и терминальная программа minicom, которую мы подключим на стандартный ввод-вывод приложения. И то и другое есть, вероятно, в любом дистрибутиве Linux. Руководство openocd можно найти на сайте проекта.Общие модули
Предположим, что все наши проекты будут находиться в каталоге $PROJ. Условимся складывать вспомогательные файлы для запуска openocd, скрипт с общими функциями GDB, скрипт для запуска консоли и т. п. в $PROJ/utils. Ещё один каталог $PROJ/xstk-common создадим для хранения общих модулей, пригодных для использования в любом приложении. В первую очередь туда поместим файл sam4s.ads с описанием аппаратуры процессора. Он позволит для доступа к регистрам различных подсистем MCU пользоваться именами переменных и символическими константами, а не адресами регистров и числовыми значениями. Этот файл я скопировал из ZFP и дополнил всем, что мне понадобилось. Хотя в реальном приложении его размер должен быть минимально необходимым, для наших экспериментов тем лучше, чем полнее будет описана аппаратура. Это позволит реже перелистывать 1300-страничное руководство по процессору. В случае языка C такой файл обычно состоит из макросов препроцессора, со всеми вытекающими отсюда возможными неожиданностями при их разворачивании посредством простой текстовой подстановки. В Ada вместо этого мы определяем полноценные переменные с указанием их размещения в памяти по физическому адресу регистра и добавлением аспектов Volatile, Import. Откуда следует, что вся работа с регистрами будет выполняться с обычном для языка строгим контролем типов. При этом, типичные для С в подобных случаях приведения типов указателей, не требуются.Пример:
type PIO_Registers is record PER : Word; PDR : Word; PSR : Word; Pad0 : Word; ... end record; PIOA: PIO_Registers with Volatile, Import, Address => System'To_Address (PIOA_Base);
Одни из самых востребованных операций при работе с MCU — работа с портами ввода-вывода, поэтому следующая полезная вещь — модуль IO_Ports io_ports.ads, io_ports.adb. И, на базе пакета IO_Ports ещё два тривиальных пакета для работы с кнопками и светодиодами платы процессора и платы расширения Oled1. Итого в $PROJ/xstk-common у нас:
io_ports.adb io_ports.ads sam4s.ads xstk_board.adb xstk_board.ads xstk_oled1_board.adb xstk_oled1_board.ads
Последние комментарии
50 минут 56 секунд назад
3 часов 9 минут назад
4 часов 58 минут назад
10 часов 44 минут назад
10 часов 50 минут назад
10 часов 53 минут назад