ЛЕКЦИЯ №7;pdf

SWorld – 17-28 June 2014
http://www.sworld.com.ua/index.php/ru/conference/the-content-of-conferences/archives-of-individual-conferences/june-2014
MODERN PROBLEMS AND WAYS OF THEIR SOLUTION IN SCIENCE, TRANSPORT, PRODUCTION AND EDUCATION‘ 2014
Технические науки – Информатика, вычислительная техника и автоматизация
УДК 004.4
Русаков В.А.
ПРОГРАММНОЦЕНТРИЧНАЯ РАЗРАБОТКА ВСТРОЕННЫХ СИСТЕМ
С 8-БИТНЫМИ МИКРОКОНТРОЛЛЕРАМИ
Национальный исследовательский ядерный университет «МИФИ»
Москва, Каширское шоссе, 31, 115409
Rusakov V.A.
SW-HEADED 8-BIT MICROCONTROLLER EMBEDDED SYSTEM
DEVELOPMENT
National Research Nuclear University MEPhI (Moscow Engineering Physics
Institute), Moscow, Kashirskoe shosse, 31, 115409
Аннотация. Во главу угла разработки встраиваемых систем ставится
прикладное программное обеспечение. Формируется адекватное малым
ресурсам
младших
моделей
описание
HAL
–
слоя
аппаратного
абстрагирования. Приводятся сведения об экспериментальной проверке
подхода, указывается на языковую проблематику его развития.
Ключевые слова: программное обеспечение, микроконтроллер, драйвер,
слой аппаратного абстрагирования, переносимость.
Abstract. Application software is considered as a key factor of embedded system
development. HAL description for minor microcontroller models is forming.
Experiment data are considered in brief, and a language way of approach
development is pointed out.
Key words: software, microcontroller, driver, hardware abstraction layer,
portability.
Введение. Практически любое современное устройство содержит в своем
составе управляющую встраиваемую систему на основе микроконтроллера
(МК). Типовой МК
представляет собой интегральную микросхему, на
кристалле которой размещены процессорный модуль с набором регистров
общего назначения, оперативная память и память программ, а также несколько
интерфейсных модулей различного типа: аналого-цифровые преобразователи
(АЦП), аналоговые компараторы, различные интерфейсы ввода-вывода
–
UART, USB, SPI, I2C, CAN и т.д.
Применение микроконтроллеров позволяет перенести логику работы
устройства на программное обеспечение (ПО) одного или нескольких МК.
Наличие на кристалле МК помимо процессорного узла аналоговых и цифровых
интерфейсных
модулей
различного
назначения
позволяет
уменьшить
количество необходимых электронных компонентов на плате конечного
устройства,
повысить
его
надежность
и
улучшить
потребительские
характеристики.
Наиболее ответственными этапами создания встраиваемой системы
являются разработка алгоритма управления, выбор типа МК и декомпозиция
системы на аппаратные и программные компоненты.
Разработка алгоритма управления. Разработка или выбор алгоритма
управления является творческой задачей. Ход её решения зависит от сочетания
как исходных требований, так и опыта разработчика.
Выбор типа микроконтроллера требует учесть ряд обстоятельств:
• Наличие большого числа семейств и моделей микроконтроллеров с
различными характеристиками, потребность в ресурсной избыточности,
малоопределенной на начальном этапе.
• Обусловленность выбора МК личными предпочтениями, знаниями и
опытом разработчика.
• Программная несовместимость микроконтроллеров различных типов,
обусловленная различиями в системах команд и аппаратной архитектуре.
Разработка архитектуры аппаратных и программных средств. Здесь
определяется, какие функции будут возложены на ПО МК, а какие – на
аппаратное обеспечение МК и дополнительные электронные компоненты.
Такая декомпозиция зависит от ранее выбранного типа МК.
Несмотря на наличие в циклах разработки программной компоненты, в
описанном типовом подходе по существу ведущей является аппаратная часть
системы. Ограниченность
такого подхода для широкого класса систем
очевидна, и его использование во многом обусловлено, помимо указанных
технологических причин личностного свойства, причинами исторического
порядка. Простые по нынешним меркам первые МК и их периферия были
дороги, а малость их ресурсов
попросту не позволяла разрабатывать
функционально сложное и относительно дорогое прикладное ПО.
Конкуренция между производителями микроконтроллеров нивелирует для
МК одного класса различия уровней аппаратного сервиса при сохранении,
однако,
наследуемых
фирменных
особенностей
реализации
и
программирования. Такая нивелировка означает, что вся функциональная
специфика
создаваемой
системы
концентрируется
в
ПО.
Поэтому
в
сложившейся ситуации максимум усилий должен быть сосредоточен именно на
разработке программной компоненты системы. Подбор контроллера, чьи
ресурсы
адекватны
отлаженному
ПО,
может
быть
возложен
на
автоматизированную часть системы проектирования.
Окончание введения.
Возникающая при этом проблема переносимости ПО между различными
аппаратными платформами решается с помощью слоя аппаратных абстракций
(HAL) [1, 2]. Такой слой функционально является компонентой нижнего уровня
операционных систем (ОС) и на своем нижнем интерфейсе взаимодействует
непосредственно с аппаратурой вычислительной системы. Наличие HAL в
составе операционной системы позволяет установить ОС на компьютерах
различных архитектур всего лишь путём его замены.
Известны архитектуры HAL больших ОС семейств Windows NT [1], Linux,
eCos [2]. Однако обсуждаемым здесь маломощным микроконтроллерам присущ
целый ряд свойств, препятствующих применению таких архитектур:
• Ограниченность ресурсов: малый объем памяти – от сотен байт до сотен
килобайт, и относительно низкие тактовые частоты – единицы и десятки
мегагерц.
• Наличие множества встроенных устройств и периферийных шинных
интерфейсов, имеющих значительные отличия в аппаратной реализации на
микроконтроллерах различных типов.
• Работа в исключительно разнообразном аппаратном окружении.
Анализ архитектур и компоновок таких МК позволил выявить важные для
последующих построений особенности их аппаратного обеспечения.
Типичным
для
микроконтроллеров
является
наличие
множества
встроенных устройств – USART, АЦП, аналоговые компараторы, ШИМ и т.д.,
и множества периферийных интерфейсов и шин – SPI, I2C, параллельная шина,
USB и т.п., посредством которых могут быть подключены внешние
периферийные
устройства.
Управление
периферийной
шиной
может
осуществляться встроенным в МК шинным контроллером, а может быть
реализовано и программно, с использованием универсальных параллельных
портов ввода-вывода. Поэтому драйверы, взаимодействующие непосредственно
с аппаратурой, могут быть разделены на драйверы внутренних устройств МК и
драйверы периферийных шин.
К внутренним устройствам ввода-вывода МК снаружи также могут быть
подключены устройства. Например, к UART (интерфейс RS-232) может быть
подключен терминал, RFID-считыватель и т.п. устройства, требующие
соответствующего управления. Поэтому над уровнем драйверов внутренних
устройств может быть добавлен драйвер подключаемого устройства.
Аналогичным образом устройством на периферийной шине может
управлять драйвер периферийного устройства. Такой драйвер должен «знать»
регистры «своего» устройства, но при этом ему должно быть ничего не
известно о периферийной шине, к которой устройство подключено. Доступ к
регистрам устройства, подключенного к шине, ему обеспечивает сервис,
предоставляемый драйвером соответствующей периферийной шины.
Благодаря описанному разделению драйвер любого периферийного
устройства сможет работать с ним независимо от того, через какой интерфейс
устройство подключено к МК и как реализован данный интерфейс – с помощью
контроллера периферийного интерфейса или же посредством универсального
параллельного порта.
Таким образом, в предлагаемой архитектуре HAL драйверы подключаемых
и периферийных устройств условно вынесены на прикладной уровень.
Драйверы внутренних устройств и периферийных шин находятся в HAL,
поскольку
именно
их
прикладной
интерфейс
обеспечивает
верхним
программным уровням платформонезависимый доступ к аппаратуре МК.
Прикладной интерфейс драйверов позволяет легко выполнить настройку
устройств ввода-вывода, организовать прием и передачу данных, скрывая
особенности аппаратного обеспечения МК и, тем самым, осуществляя
абстрагирование устройств ввода-вывода микроконтроллеров. На практике
такое
абстрагирование
библиотек
может быть реализовано
подпрограмм (драйверов)
поддержки
путем
использования
типовых
устройств и
интерфейсов – USART, 1-wire, EEPROM, АЦП и т.п. Зачастую такие
библиотеки включаются в состав компиляторов, например, CodeVision AVR [3,
4], CCS PIC [5], HI-TECH
PICC [6] или разрабатываются [7] отдельными
энтузиастами. Наличие стандартизованного прикладного интерфейса драйверов
однотипных устройств в сочетании с доступностью библиотек таких драйверов
позволило бы переносить код приложения между различными платформами без
внесения изменений.
Изучение существующих разработок показало, что подобных библиотек
поддержки
ввода-вывода
на
микроконтроллерах
различных
типов
не
существует. Из-за этого при необходимости переноса кода приложения на МК
другого семейства приходится подбирать библиотеку с похожим прикладным
интерфейсом и переписывать код приложения под неё, или создавать свою
собственную библиотеку под приложение.
По сравнению с традиционным кодом, вызовы функций драйверов
требуют больше ресурсов и выполняются дольше за счет необходимости
сохранения/восстановления контекста вызова, однако эту проблему можно
решить при использовании inline-функций.
Для проверки предлагаемых архитектурных решений и возможностей
имеющихся средств их описания было решено обеспечить переносимость
несложного приложения, использующего АЦП и UART в составе МК и
внешнюю микросхему часов реального времени. В этих целях были
реализованы несколько драйверов поддержки ввода-вывода: драйвер АЦП,
драйвер последовательного асинхронного интерфейса UART, драйвер шины
SPI и драйвер микросхемы часов реального времени DS1305 [8] как внешнего
периферийного устройства на шине SPI. В качестве тестовых платформ для
разработанных драйверов были использованы два современных RISCмикроконтроллера: МК PIC18F252 [9] семейства Microchip PIC и МК atmega8
[10]
семейства
применяются
в
Atmel
Выбранные
AVR.
несложных
устройствах,
микроконтроллеры
характеризуются
широко
невысокой
стоимостью, схожими характеристиками и наборами аппаратных ресурсов – 10битный АЦП на 6 каналов, модуль USART, контроллер шины SPI, и
поставляются в одинаковых корпусах DIP28.
В качестве средства описания был выбран универсальный язык высокого
уровня
Си.
Проблемой
стало
отсутствие
доступного
компилятора,
поддерживающего оба целевых МК. Поэтому разработка и компиляция кода
под МК AVR выполнялась с помощью IDE Atmel AVR Studio 4 – компилятор
AVR-GCC в составе пакета WINAVR, а под МК PIC – с помощью IDE MPLAB
7.11 и компилятора HI-TECH C Pro 9.64. В результате были реализованы два
независимых пакета драйверов для МК AVR Atmega8 и PIC18F252.
Разработанные драйверы позволяют выполнять инициализацию устройств
в различных режимах, включать/выключать устройства, выполнять считывание
(UART, АЦП, SPI) и передачу (UART, SPI) данных. Драйвер часов
обеспечивает базовые функции по установке и считыванию даты/времени,
запуску и остановке часов. Драйвер часов использует для взаимодействия с
микросхемой драйвер интерфейса SPI.
Интерфейс разработанных драйверов в целях повышения гибкости их
использования предусматривает возможность инициализации устройств в
различных режимах, в том числе специфичных для целевой платформы.
С
применением
разработанных
драйверов,
как
экспериментально
подтверждено,
• Возможен перенос кода приложения, использующего модули АЦП,
USART, SPI между контроллерами семейств PIC и AVR.
• Обеспечена переносимость драйвера часов DS1305 между различными
платформами с использованием драйвера SPI. Несложно добавить поддержку и
3-проводного (3-wire) интерфейса, имеющегося у DS1305.
Заключение. Специфическая функциональность относительно несложной
встраиваемой системы концентрируется в прикладном ПО, поэтому в
современных условиях его создание должно быть положено в центр разработки
такой системы. МК с его типовой аппаратной функциональностью следует
подбирать
автоматизированным
образом.
Подобная
последовательность
разработки системы требует обеспечения переносимости ПО.
Архитектурным средством обеспечения переносимости является HAL –
слой аппаратных абстракций. Была произведена адаптация конфигурации HAL
для малых ресурсов 8-битных МК.
Для приложения, использующего АЦП и UART в составе МК и внешнюю
микросхему часов реального времени, в соответствии с предложенной
архитектурой были реализованы версии HAL для двух тестовых платформ. В
качестве средства реализации был взят универсальный язык Си, а платформ –
модели широко распространенных микроконтроллеров фирм Microchip и Atmel.
Переносимость приложения была подтверждена экспериментально.
Наряду
с
этим
практика
создания
компонентов
HAL
показала
недостаточность существующих средств для раскрытия всего потенциала
предлагаемого подхода. Основой новых средств поддержки разработки должен
стать специализированный язык. Описания с его использованием позволят
переложить рутинную часть разработки встроенных систем на среду
поддержки.
Литература
1. Таненбаум Э. Современные операционные системы. 2-е изд. – СПб.:
Питер, 2002. – 1040с.: ил.
2. http://ecos.sourceware.org/docs-1.3.1/ref/ecos-ref.b.html. The eCos Hardware
Abstraction Layer (HAL).
3.
http://www.hpinfotech.ro/html/cvavr_features.htm.
HP
InfoTech.CodeVisionAVR.
4. Лебедев М.Б. CodeVisionAVR: пособие для начинающих. – М.:ДодэкаXXI, 2008. – 592 с.: ил.
5. http://www.ccsinfo.com/content.php?page=compilers. Code Optimizing C
Compiler for Microchip PIC® DSCs. Custom Computer Services Inc.
6. http://www.htsoft.com. Embedded C Compilers and Tools for Software
Development: HI-TECH Software. Microchip Technology Inc.
7.
http://easyelectronics.ru/avr-uchebnyj-kurs-biblioteka-dlya-lcd-na-baze-
hd44780.html. AVR. Учебный курс. Библиотека для LCD на базе HD44780.
8. DALLAS SEMICONDUCTOR DS1305 Serial Alarm RTC, 1997. – 20 p.
9. Microchip PIC18Fxx2 Data Sheet 28/40-pin High Performance, Enhanced
FLASH Microcontrollers with 10-bit A/D, 2002 – 330 p.
10. Atmel 8-bit AVR Microcontroller with 8K Bytes In-System Programmable
Flash ATmega8/ATmega8L, 2006 – 300 p.
Статья отправлена: 12.05.2014г.
© Русаков В.А.