РадиоЛоцман - Все об электронике

Ada 2012 для платформы Cortex-M4

STMicroelectronics STM32F401

Журнал РАДИОЛОЦМАН, июль 2014

William Wong

Electronic Design

Я использовал C и C++ со времени их появления, и мне хочется думать, что я пишу хорошие коды. Хотя, должен признаться, в созданных приложениях я допустил множество ошибок, устранение которых иногда требовало длительных и утомительных отладочных сессий. Почти каждый новый микроконтроллер поддерживается бесплатным инструментарием, включающим в себя компилятор C/C++.

К сожалению, C чрезвычайно недружественен, и C++ лишь немногим лучше. Тем не менее, до настоящего времени они остаются основным инструментом программистов встроенных систем. Это одна из причин, по которой я с нетерпением ждал появления анонсированного компанией AdaCore пакета Ada 2012 для платформы Cortex-M. Теперь его можно бесплатно скачать, воспользовавшись ссылкой [1].

Cortex-M является основным из простейших 32-разрядных микроконтроллеров, используемым почти всеми производителями микроконтроллеров, принявшими архитектуру ARM. Некоторые компании, такие как Green Hills Software, Atego и AdaCore и раньше поддерживали платформу Cortex, но опирались при этом на ранние стандарты Ada. В Ada 2012 добавлен целый рад новых возможностей, включая контрактное программирование [2].

Засучив рукава

Мне уже доводилось поработать в среде GNAT Programming Studio (GPS), выпущенной компанией AdaCore. Я создавал приложения для Linux на разработанной Texas Instruments инструментальной платформе BeagleBone с процессором Cortex-A8. Новый инструментарий предназначен для «голого железа», что необходимо для многих приложений.

Ada 2012 для платформы Cortex-M4
Рисунок 1. Последняя версия набора инструментов Ada 2012 компании
AdaCore работает на платформе платы STMicroelectronics
STM32F4 Discovery с процессорным ядром Cortex-M4.

Начало работы было простым, поскольку GPS была уже установлена. На установку отладочного интерфейса ST-Link на плату STM32 (Рисунок 1) времени потребовалось больше. Затем предлагалось запустить демонстрационное приложение, попеременно включающее ряд светодиодов. Отрывок кода, управляющего миганием светодиодов (Листинг 1), я включил в статью, чтобы подчеркнуть некоторые преимущества использования Ada 2012.

Листинг 1.

  with LEDs;          use LEDs;
with Button; use Button;
with Ada.Real_Time; use Ada.Real_Time;
package body Driver is
type Index is mod 4;
Pattern : constant array (Index) of User_LED := (Orange, Red, Blue, Green);
task body Controller is
Period : constant Time_Span := Milliseconds (75); -- arbitrary
Next_Start : Time := Clock;
Next_LED : Index := 0;
begin
loop
Off (Pattern (Next_LED));
Next_LED := Next_LED +
(if Button.Current_Direction = Counterclockwise then -1 else 1);
On (Pattern (Next_LED));
Next_Start := Next_Start + Period;
delay until Next_Start;
end loop;
end Controller;
end Driver;
________________________________________
with LEDs; use LEDs;
with Button; use Button;
with Ada.Real_Time; use Ada.Real_Time;
package body Driver is
type Index is mod 4;
Pattern : constant array (Index) of User_LED := (Orange, Red, Blue, Green);
task body Controller is
Period : constant Time_Span := Milliseconds (75); -- arbitrary
Next_Start : Time := Clock;
Next_LED : Index := 0;
begin
loop
Off (Pattern (Next_LED));
Next_LED := Next_LED +
(if Button.Current_Direction = Counterclockwise then -1 else 1);
On (Pattern (Next_LED));
Next_Start := Next_Start + Period;
delay until Next_Start;
end loop;
end Controller;
end Driver;

Даже если вам не приходилось пользоваться Ada, вы должны получить представление о заложенных в него идеях. Например, спецификация тела задачи выдвигает на первый план встроенную поддержку многозадачности. Отметим также использование в индексах данных беззнакового типа, ограничивающих адресацию матричных структур. В отличие от C, здесь нет необходимости проверять Next_LED после его инкрементирования. Кроме того, я предпочитаю более многословные условные выражения в конструкциях if/then/else языка Ada, используемой в C/C++ комбинации ?:. Я программировал на APL, и его однострочные конструкции были лаконичными, но, как правило, непонятными. О C и C++ можно сказать то же самое.

Перед C и C++ Ada имеет множество преимуществ. Не лишена Ada и недостатков, среди которых можно выделить ее недоступность для некоторых типов микроконтроллеров. Однако для ARM Cortex такой проблемы больше не существует. Разработчики смогут воспользоваться всем многообразием функций Ada 2012, от дженериков до многозадачности.

Я призываю всех желающих написать пуленепробиваемый код для встраиваемых приложений, чтобы на практике убедиться в возможностях комбинации AdaCore и STM32. Это совсем недорого и очень функционально. Поддержка ST-Link также позволяет ему работать с такими платформами как STM32F401 Nucleo. В этом я тоже убедился на своей Nucleo.

Heartbleed [3] является лишь одним из многих указаний на то, какой ущерб может нанести единственная ошибка проверки принадлежности к диапазону. C не производит таких проверок в принципе, а вот Ada делает это не только при доступе к массиву, но и по умолчанию. Ada не устранит ошибки из вашего кода, но сделать их будет намного сложнее.

Ссылки

  1. libre.adacore.com
  2. http://electronicdesign.com
  3. electronicdesign.com

Перевод: AlexAAN по заказу РадиоЛоцман

На английском языке: Running Ada 2012 On The Cortex-M4

STM32F401 Купить ЦенаКупить STM32F401 на РадиоЛоцман.Цены — от 109 до 544
33 предложений от 20 поставщиков
Исполнение: UFQFPN48. Микроконтроллер широкого назначения STM32F401CBU6. Описание в формате PDF
ЗУМ-СМД
Россия
STM32F401CCU6
STMicroelectronics
109 ₽
AliExpress
Весь мир
Совершенно новый STM32F401 макетная плата STM32F401CCU6 STM32F411CEU6 STM32F4 обучающая плата
115 ₽
Элитан
Россия
STM32F401RBT6
STMicroelectronics
129 ₽
Ким
Россия
STM32F401RBT6
STMicroelectronics
296 ₽
Для комментирования материалов с сайта и получения полного доступа к нашему форуму Вам необходимо зарегистрироваться.
Имя
Фрагменты обсуждения:Полный вариант обсуждения »
  • В подзаголовке, вероятно, ошибка: Texas Instruments » STM32F401 STM32F401 производит ST Microelectronics, а не TI
  • Исправили, спс