AC-DC и DC-DC преобразователи напряжения Top Power на складе ЭЛТЕХ
РадиоЛоцман - Все об электронике

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

STMicroelectronics STM32F401

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

Я использовал 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

Electronic Design

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

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

72 предложений от 30 поставщиков
Контроллеры.Тип: Микроконтроллер 32 бит серии ARM® Cortex®-M4Описание: ARM® Cortex®-M4 STM32F4 Microcontroller IC 32-Bit Single-Core 84MHz 256KB (256K x 8) FLASH 64-LQFP...
STM32F401RCT6
STMicroelectronics
от 194 ₽
ИМЭК
Россия и страны ТС
STM32F401CBU6
STMicroelectronics
328 ₽
STM32F401CBU6
STMicroelectronics
от 636 ₽
Augswan
Весь мир
STM32F401CCU6
STMicroelectronics
по запросу
ТМ Электроникс. Электронные компоненты и приборы. Скидки, кэшбэк и бесплатная доставка
Для комментирования материалов с сайта и получения полного доступа к нашему форуму Вам необходимо зарегистрироваться.
Имя
Фрагменты обсуждения:Полный вариант обсуждения »
  • В подзаголовке, вероятно, ошибка: Texas Instruments » STM32F401 STM32F401 производит ST Microelectronics, а не TI
  • Исправили, спс