Обзор и классификация инструментальных систем для микроконтроллерных стендов SDK 1. 1 и SDK 3. 1

ОБЗОР И КЛАССИФИКАЦИЯ ИНСТРУМЕНТАЛЬНЫХ СИСТЕМ ДЛЯ МИКРОКОНТРОЛЛЕРНЫХ СТЕНДОВ SDK 1.1 И SDK 3.1.

P.C. Зубаревич, А.О. Ключев

При программировании систем на базе микроконтроллеров разработчик сталкивается с более жесткими ограничениями, чем при создании прикладных программ для персонального компьютера. В основном это связано с двумя особенностями микроконтроллерных систем.

Для написания и сборки программ используются внешние инструментальные средства (как правило, компьютер, связанный с целевой системой посредством какого-либо инструментального канала), и только полученный исполняемый код загружается в память микроконтроллера (в данной статье рассматриваются только системы, имеющие оперативную память программ и/или допускающие внутрисистемное программирование энергонезависимой памяти (ISP)).

Инструментальное программное обеспечение для таких систем по разнообразию и удобству использования обычно уступает средствам разработки программных продуктов для ПК.

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

Учебные стенды SDK-1.1 и SDK-3.1

Стенды SDK-1.1 и SDK-3.1 выпускаются ООО "ЛМТ" и предназначены в первую очередь для организации учебного процесса по ряду дисциплин, связанных с вычислительной техникой. Имея стенды семейства SDK в качестве базы для лабораторных работ, студенты СПбГУИТМО получают представление о принципах организации вычислительных систем и их отдельных компонентов (вычислительного ядра, подсистемы памяти, устройств ввода-вывода и т.д.), приобретают навыки низкоуровневого программирования микропроцессорных систем, а также расширяют свой кругозор и повышают профессиональный уровень в области вычислительной техники вообще. Кроме того, контроллеры SDK могут использоваться в качестве устройств управления в составе более сложных систем: например, при автоматизации технологических процессов, в лабораторных экспериментальных установках, в системах сбора информации.

Оба стенда построены на базе однокристальных микроЭВМ (микроконтроллеров). Они имеют похожую организацию вычислительного ядра, включают в себя во многом похожие наборы периферийных устройств и микросхем, таких как контроллер последовательного интерфейса RS-232C, внешнее ОЗУ, e2prom, часы реального времени и т.д. В то же время по многим параметрам стенды различаются: у них разные наборы регистров управления периферией, по-разному организовано пространство памяти (не говоря уже о деталях расположения тех или иных программно-доступных элементов в адресном пространстве), разные возможности и принципы работы системы прерываний. Все эти различия обусловлены тем, что используются микроконтроллеры разных производителей, имеющие различную архитектуру.

Программирование стендов

Основные этапы программирования стендов SDK-1.1 и SDK-3.1, исключая разработку алгоритмов решения задачи, исправление ошибок и прочие подготовительные действия, таковы:

1. создание файлов с исходным текстом программы на выбранном языке программирования (с использованием специализированной среды разработки (IDE) или обычного текстового редактора);

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

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

При программировании микроконтроллеров выбор языка программирования в принципе ограничен только наличием соответствующих компиляторов для нужного процессора. Чаще всего в готовом виде имеются, по крайней мере, ассемблеры и компиляторы Си/Си++ с необходимыми расширениями для конкретной архитектуры. В большинстве задач предпочтительнее использование Си, возможно, с ассемблерными вставками. Как более высокоуровневый язык, Си обеспечивает гораздо большую гибкость и понятность исходных текстов программ, позволяет переложить часть ответственности за оптимизацию кода (особенно низкоуровневую) на компилятор и существенно облегчает процесс тестирования и отладки, неизбежно сопутствующий программированию. В большинстве случаев проигрыш в производительности результирующего кода по сравнению с программами, написанными на чистом Ассемблере, незначителен. Более того, для эффективной оптимизации кода "вручную" программисту придется досконально изучить особенности используемого процессора, что многократно увеличит время разработки, а, следовательно, и себестоимость разрабатываемого продукта.

В состав средств разработки программ для стендов SDK-1.1 (интегрированная среда разработки ц Vision на основе компиляторов для 8051 от Keil Software) и SDK-3.1 (пакет Softune Workbench фирмы Fujitsu) входят компиляторы Си и Ассемблера, для MCS-51 имеется также компилятор языка PL/M, с которым могут взаимодействовать обычные Си-программы. Пакет ц Vision принципиально подходит для работы с различными MCS51-совместимыми микроконтроллерами. Softune Workbench, но ориентирован на семейства микроконтроллеров FR, F2MC-16, F2MC-8L и FR-V фирмы Fujitsu. Наличие оболочки IDE в обоих случаях облегчает задание опций компилятора, компоновщика и конвертера, хотя все опции для конкретного проекта могут быть заданы раз и навсегда в конфигурационных файлах, и сборка может производиться без участия IDE.

Оба компилятора могут выполнять определенные шаги общей оптимизации кода по размеру и быстродействию: "склеивание" констант, разворачивание циклов и inline-подстановка небольших функций, сокращенные логические вычисления, оптимизация вызовов функций и т.д. Компилятор C51 имеет более развитые возможности такой оптимизации, включая использование регистровых переменных и параметров, где это возможно, и выполнение повторяющихся вычислений только один раз.

За общей оптимизацией (среднего уровня) следует низкоуровневая оптимизация, которая специфична для каждого типа процессора. В целом процессор фирмы Fujitsu предоставляет более широкие возможности аппаратно-зависимой оптимизации в силу особенностей системы команд и набора регистров. Его система команд была спроектирована с учетом возможности эффективного использования языков высокого уровня (прежде всего, языка Си) и многозадачной работы, поэтому поддерживается, в частности, большое разнообразие указателей и режимов адресации, возможность организации областей системного и пользовательского стеков. Фактически, конечно, возможности оптимизации зависят от реализации компилятора.

Возможности и варианты отладки

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

1. Создание чисто программной модели целевой системы на инструментальном компьютере и проведение экспериментов с этой моделью - используется отлад-чик-симулятор. При этом сама целевая система может физически отсутствовать. Очевидное достоинство такого подхода - возможность сколь угодно детального изучения поведения модели без каких-либо конфликтов. Недостаток всего один, но серьезный: модель практически никогда не соответствует моделируемой системе полностью.

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

3. Исполнение программного кода непосредственно в целевой системе и анализ его поведения с помощью отладчика-монитора. Этот способ отладки предполагает загрузку монитора в память микроконтроллера и его связь с отладчиком на ПК через инструментальный канал. Однако не все задачи отладки удается решить таким способом: например, драйвер последовательного канала или программатор flash-памяти, вероятно, будет конфликтовать с программой-монитором на уровне аппаратных ресурсов целевой системы.

Все перечисленные проблемы в равной степени касаются и рассматриваемых стендов. В пакет ц Vision входит весьма удобный отладчик-симулятор dScope. Он предоставляет возможность трассировки программного кода как на уровне машинных инструкций, так и на уровне исходных операторов языка высокого уровня, имеет средства анализа производительности кода. Состояние всей периферии, входящей в состав микроконтроллера Intel 8051, может быть проанализировано и/или изменено в любой момент. При этом, однако, не достигается полная эмуляция стенда SDK-1.1, т.е. невозможно, к примеру, проверить работу с жидкокристаллическим дисплеем, часами реального времени и прочими специфичными для данного стенда устройствами.

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

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

Назначение и виды загрузчиков

В результате связывания объектных файлов проекта получается (помимо листинга и прочих вспомогательных файлов) объектный файл в абсолютных адресах. Для удоб-

ства пересылки программы в память контроллера этот файл преобразуется к шестна-дцатеричному виду с помощью соответствующего конвертера. OH51 (Keil) переводит объектный файл в формат Intel HEX: большинство шестнадцатеричных последовательностей (строк) содержат непосредственно данные (исполняемый код), целевой адрес памяти микроконтроллера и служебные поля (включая контрольную сумму). В таком виде файл загружается в стенд по последовательному каналу с помощью инструментальной системы на стороне ПК и резидентного загрузчика на стороне стенда. Протокол взаимодействия программы-передатчика и программы-приемника достаточно прост, но все же предусматривает несколько уровней контроля правильности передачи.

Важной частью инструментального ПО стендов являются резидентные мониторы-загрузчики. Их код находится во flash-памяти микроконтроллеров, и при запуске или рестарте процессора загрузчик получает управление.

Организация памяти ADuC812 такова, что объем исполняемого кода не может превышать 64 Кбайт, поэтому формат Intel HEX, отводящий 4 шестнадцатеричные цифры под адрес, полностью подходит для стенда SDK-1.1. Для микроконтроллера MB90F543 программа может располагаться почти в любом месте 16-мегабайтного адресного пространства (24-битный адрес), поэтому такой формат HEX-файла использоваться уже не может. В состав Softune Workbench входят утилиты для преобразования объектных файлов в форматы Intel HEX, Intel Extended HEX и Motorola S-Record. Последний, генерируемый утилитой F2MS, и является наиболее подходящим для стенда SDK-3.1, так как предусматривает от 4 до 8 шестнадцатеричных цифр для хранения, соответственно, 16-, 24- или 32-битного адреса. Этим обстоятельством обусловлено и принципиальное различие загрузчиков HEX202 и HEX203: последний имеет функции для обработки как Extended HEX, так и S-Record (формат принимаемого файла определяется автоматически в начале приема первой строки).

Помимо загрузки программ, HEX202 и HEX203 выполняют еще ряд необходимых функций:

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

выдача номера версии и даты компиляции HEX-загрузчика в последовательный канал в ответ на получение символа 'v';

выдача в последовательный канал дампа памяти контроллера, начиная с указанного адреса, в ответ на получение символа 'd'.

Другими многофункциональными инструментами являются схожие между собой системы T167B, T2 и M3P. T167B содержит несколько десятков команд для работы с последовательным каналом и HEX-файлами (в частности, передача программы в стенд, добавление стартового адреса программы), т.е. ориентирована на поддержку стендов семейства SDK. Пользовательский интерфейс реализован в виде интерпретатора языка Форт, что позволяет (при использовании T2 или M3P) расширять возможности системы собственными командами, производными от уже имеющихся. Обе системы предназначены прежде всего "для внутреннего пользования", и при наличии исходных текстов (на языке Си или Си++) могут быть функционально дополнены, что делает их универсальными инструментами для выполнения широкого диапазона низкоуровневых задач, связанных с проектированием и эксплуатацией специализированных микропроцессорных систем.

Перечисленные инструменты прежде всего обеспечивают учебный процесс с использованием SDK-1.1 и SDK-3.1. Они ориентированы на загрузку программ в оперативную память стендов, так как эта задача является основной при выполнении студентами лабораторных работ на микропроцессорной технике. В ряде случаев, однако, воз-

никает необходимость перепрограммирования flash-памяти микроконтроллеров: например, после изготовления нового экземпляра стенда в него нужно поместить HEX-загрузчик (то же самое - при создании новой версии самого загрузчика), при использовании стенда в составе более сложной электронной системы также может потребоваться размещение специального ПО в энергонезависимой памяти.

Для решения задач начальной загрузки во flash-память в микроконтроллерах фирмы Fujitsu предусмотрен режим внутрисистемного программирования BiROM. При замыкании перемычкой соответствующих контактов на плате стенда и последующем сбросе контроллер переводится в режим BiROM, и начинает исполняться код, расположенный в специальном ПЗУ контроллера. Программа BiROM обеспечивает низкоскоростной прием данных по последовательному каналу, что позволяет выполнить следующие шаги:

1. загрузка flash-программатора в ОЗУ стенда;

2. перепрограммирование flash-памяти микроконтроллера;

3. перевод стенда в нормальный режим работы и исполнение кода, помещенного в энергонезависимую память.

Режим BiROM принципиально может использоваться и для прикладного программирования SDK-3.1 (ОЗУ), но целесообразнее с его помощью разместить во flash-памяти более удобные средства загрузки и мониторинга, описанные выше.

Встроенный загрузчик микроконтроллера ADuC812, разработанный фирмой-изготовителем изделия, выполняет функции, аналогичные BiROM в SDK-3.1. Запуск этого загрузчика также инициируется установкой соответствующей перемычки на плате с последующим сбросом. Со стороны хост-машины протокол загрузки поддерживается программой ADuC Downloader, модифицированной фирмой ЛМТ с учетом специфики использования гальванически изолированного приемопередатчика в SDK-1.1: при соединении с контроллером ПК должен использовать управляющие линии RTS и DTR для питания приемопередатчика стенда. Отличие загрузки в ADuC от механизма BiROM заключается в том, что программирование памяти flash/EE происходит напрямую - без участия дополнительного программатора, размещаемого в ОЗУ SDK-1.1. Загрузчик входит в комплект программного обеспечения от фирмы Analog Devices, включающий также симулятор ADSIM и внутрисхемный отладчик DeBug.

Операционные системы для микроконтроллеров

В общем случае операционные системы подразделяются на три категории:

системы пакетной обработки, ориентированные на выполнение наборов (пакетов) вычислительных задач за как можно меньшее время (на основе предварительного планирования мультипрограммной смеси);

системы разделения времени (системы оперативной обработки), рассчитанные на активное взаимодействие с пользователем (оператором) и выполнение задач по мере их поступления;

системы реального времени (ОСРВ), обеспечивающие гарантированное время реакции, т.е. интервал времени между запуском программы и получением результата.

В некоторых ОС могут присутствовать два или даже все три перечисленных способа организации вычислительного процесса (и применяться в зависимости от класса задач).

Любая ОС выполняет две основных функции:

1. управление ресурсами (планирование ресурсов и отслеживание их состояния);

2. предоставление программисту виртуальной (расширенной) машины для повышения уровня программирования.

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

Системы реального времени для рассматриваемых микроконтроллеров разработаны целым рядом фирм. Примеры таких ОСРВ: RTX51, RTXC, CMX-RTX, KR-51Tiny (MCS-51), REALOS, EUROS, OSEK/VDX (F2MC-16LX). Некоторые из названных ОС поддерживают несколько архитектур вычислительных систем, что дает разработчику ПО возможность многократного использования собственного программного кода. Зачастую, однако, ОСРВ не только расширяют, но в чем-то и ограничивают возможности программиста, поэтому вопрос целесообразности их использования должен рассматриваться отдельно для каждой конкретной задачи.

Заключение

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

Литература

1. Ключев А., Платунов А. Встроенные инструментальные средства современных микроконтроллеров // Электронные компоненты. 2002. №6. С. 1-4.

2. Ключев А., Кустарев П., Платунов А. Инструментальные и учебные контроллеры семейства SDK // Компоненты и технологии. 2002. №5. С. 70-73.

3. Analog Devices. ADuC812. Microconverter, multichannel 12-bit ADC with embedded FLASH MCU. URL: http://www.analog.com/.

4. Fujitsu Limited. F2MC-16 family 16-bit microcontroller Embedded C programming manual for fcc907. URL: http://www.fujitsu.com/.

5. Fujitsu Limited. F2MC-16LX 16-bit microcontroller MB90500 series programming manual. URL: http://www.fujitsu.com/.

6. Олифер H.A., Олифер В.Г. Сетевые операционные системы. URL: http://www.citforum.ru/.