Close

08.06.2016

MCU Blocks — новая интегрированная среда разработки программ для микроконтроллеров

В стенах cтуденческого конструкторского бюро информационных технологий РГАТУ имени П.А.Соловьева совместно с предприятием НПП САТЭК плюс уже несколько лет разрабатывается новая интегрированная среда разработки программ для встраиваемых систем на базе микроконтроллеров. В этой статье я, Большаков Олег, руководитель разработки, хотел бы рассказать об этом проекте. Среда, о которой пойдет речь, предназначена для радиолюбителей, робототехников, ардуинистов и всех тех, кто хотел бы разрабатывать программы для микроконтроллеров быстрее и проще, а исходный код программы был понятнее и прозрачнее.

Для тех, кто не знает, что такое микроконтроллеры: это небольшие микросхемы, содержащие микропроцессор, свою ОЗУ, ПЗУ и блоки формирования и считывания различных сигналов (таймеры, счетчики, ШИМ, АЦП, ЦАП, компараторы и т. д.). Микроконтроллеры используются почти в любой встраиваемой системе, особенно в носимой электронике, робототехнике, где необходим энергоэффективный вычислитель с малыми габаритами, весом и позволяющий считывать и выдавать определенные сигналы.Ethernet_Board_E400

Известно множество инструментов для разработки программ управления микроконтроллерами. К наиболее популярным можно отнести: AVR Studio, Arduino IDE, IAR Embedded workbench, STM Studio, Atollic TrueSTUDIO, Code::Blocks, MPLAB X IDE и другие. Большинство имеющихся на сей день инструментов предлагают разработку на языках C  / C++, однако программирование на этих языках осуществляется на низком уровне, т.е. в логике битов периферийных регистров. Проблему пытаются решать использованием библиотек, однако такой подход либо приводит к неэффективному коду, либо библиотеки получаются совершенно непрозрачными и непонятными, т.к. ради эффективности и кроссплатформенности библиотеки часто разбиты макросами на фрагменты кода. Читать такой код очень сложно.

Одна из наиболее актуальных проблем при разработке программ для микроконтроллеров — это разработка протоколов на базе имеющихся интерфейсных аппаратных модулей. Поскольку стандарты распространяются на интерфейсы (т.е. на канальный и физический уровень согласно модели OSI), все остальные уровни пользователю приходится реализовывать вручную. К примеру, есть два микроконтроллера, которые связаны друг другу через интерфейс SPI. Любой, кто решал подобные задачи, понимает, что для реализации своего протокола общения между микроконтроллерами необходимо проработать много моментов: организацию структур данных в обоих программах, учет параллелизма исполнения, изменение алгоритмов работы программ микроконтроллеров, разработка структуры передаваемых через интерфейс пакетов, разработка алгоритмов формирования и разбора пакетов, реакция на ошибки при передаче и т. д. Библиотеки, конечно, могут прийти на помощь, но они очень часто либо неполны, либо негибки, либо неэффективны.

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

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

Перечисленные выше недостатки в той или иной мере могут обходиться окольными путями в различных средах разработки, однако на дворе уже 2016-ый год и давно пришла пора создать новую интегрированную среду разработки, которая, с одной стороны, позволила бы повысить уровень программирования, а с другой, позволяла бы автоматизированно управлять параметрами реализации нижнего уровня программ. На текущий момент такие попытки не были успешными, отчасти потому, что хорошо развитые технологии разработки программ для компьютерных систем тяжело поддаются специализации под микроконтроллеры, и основным барьером здесь выступает сравнительно малое количество ресурсов на специализированных вычислителях.

MCU Blocks создана с целью решить все эти и многие другие проблемы разработчиков. Разработка в этой среде ведется на новом языке программирования Embeddecy. Пугаться нового языка программирования не стоит — он является надстройкой над языком С и имеет с ним обратную совместимость — т.е. при желании программы, как и раньше, можно писать в нотации синтаксиса языка С, а можно использовать новые элементы языка, к которым относятся модули (задачи, пакеты и их шаблоны), конструкции параллельного программирования, конструкции для обмена сообщениями по выбранным протоколам, а также такой «синтаксический сахар», как делегаты, события, удобная работа с битами, пространства имен и т. д. Программа на языке Embeddecy транслируется средой в программу на низкоуровневом языке (в первую очередь будет реализована генерация на язык С), после чего происходит компиляция существующими средствами под целевую платформу.

MCUBlocks ide screen

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

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

В дополнение к текстовому редактору языка Embeddecy среда MCU Blocks содержит графические редакторы: редактор схемы оборудования, редактор блок-схем. В редакторе схемы оборудования можно делать следующие вещи:

  • отобразить на схеме оборудования программируемые (микроконтроллер, мобильный телефон, персональный компьютер и т.д.) и непрограммируемые устройства распределенной системы (датчики, исполнительные устройства и т.д.);
  • показать, по каким интерфейсам и через какие выводы будут взаимодействовать устройства друг с другом;
  • из палитры модулей выбирать различные модули управления: модули управления датчиками, исполнительными механизмами или внутренними ресурсами микроконтроллера. При этом задаются настройки модулей управления, в том числе линиями показывается, через какие выводы устройства и интерфейсы они работают;
  • производится генерация кода на языке Embeddecy по настройке шаблонов библиотечных модулей так, как это задано на схеме оборудования.

Прототип системы

Одним из наиболее интересных компонентов среды будет инструмент автоматизированной генерации протоколов, что удобно для работы на высоком уровне с оборудованием, не предусмотренным в библиотеке.

Сама по себе среда нацелена на поддержку распределенных систем на базе микроконтроллеров, поэтому программы можно будет разрабатывать не только для самих микроконтроллеров, но и для устройств, с которыми микроконтроллеры могут взаимодействовать. Для этого в среду будет интегрирован инструмент для генерации операторских панелей по управлению микроконтроллерами, в графическом редакторе которого можно нарисовать операторскую панель и автоматически получить программу для компьютера или мобильного устройства, превратив его фактически в пульт управления своим микроконтроллером. Это может быть удобно, как для отладки процессов в микроконтроллере, так и, например, для управления движущейся системой на базе микроконтроллера (например робот, которым можно управлять по Wi-Fi или Bluetooth и просто видеть, что с ним происходит с приложения на телефоне, планшете или компьютере).

Также одной из целей создания среды разработки является повышение степени переносимости программ между различными моделями и даже архитектурами. Целевыми аппаратными платформами среды будут выступать микроконтроллерные архитектуры AVR, STM, PIC, ARM.

Безусловно, все эти новшества обернуты в удобства современной IDE: подсветка синтаксиса, автодополнение кода, возможности рефакторинга, подсветка ошибок, интуитивный пользовательский интерфейс, интеграция графических и текстовых редакторов (reverse engeneering), в общем то, без чего сложно представить современную IDE.

Подробнее о том, как разрабатывать программы в MCU Blocks, мы рассмотрим в следующих статьях.

Source: MCU Blocks Blog

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *