УДК 681.3 | (РГУПС), (РГУПС) |
СРЕДСТВА ОТЛАДКИ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ДЛЯ МИКРОКОНТРОЛЛЕРА FUJITSU
Рассматривая средства отладки программного обеспечения для контроллеров, последние удобно разделить на две категории. В первую категорию входят контроллеры, построенные на базе процессоров тех же семейств, которые применяются в персональных компьютерах – Intel x86, Motorola 68x00 и других, во вторую – контроллеры, использующие процессоры, разработанные специально для них.
Во вторую категорию можно отнести большую часть контроллеров, имеющихся на мировом рынке. Это, очевидно, связано с тем, что разработка и производство упрощенного процессора обходится дешевле, чем выпуск сложной и дорогостоящей модели, значительная часть возможностей которой никогда не требуется для применения в контроллере. Кроме того, упрощение архитектуры позволяет в ряде случаев добиться значительного улучшения быстродействия процессора. Разработку программного обеспечения для контроллеров, построенных на основе традиционных процессоров ПК, можно вести на персональном компьютере с помощью обычных средств разработки, для остальных контроллеров требуются специальные инструменты. Следует отметить, что в обоих случаях разработка и отладка программ производится с помощью ПК, только реализуется это по-разному.
Компиляция и сборка программ для микроконтроллеров производится с помощью кросс-компиляторов и редакторов связей. Эти утилиты поставляются разработчиками контроллеров; они всегда соответствуют ряду международных стандартов и, как правило, обладают сходными возможностями и характеристиками. Рассмотрение их выходит за рамки настоящей статьи.
Отладку готовых программ можно вести двумя способами: с помощью программного эмулятора (моделирование контроллера на ПК), либо непосредственно на контроллере. Первый способ хорош тем, что не требует наличия контроллера и всегда является доступным при наличии ПК, однако он требует значительных усилий, направленных на разработку эмулятора. Современные контроллеры довольно сложны, поэтому разработка эмулятора может оказаться чрезмерно дорогой и занять слишком много времени. Второй способ требует наличия контроллера, а также специального программного обеспечения (ПО) для него. Достоинствами этого способа является то, что, во-первых, процесс выполнения программы моделируется со стопроцентной точностью, и, во-вторых, для его осуществления требуется значительно более простое и дешевое ПО.
В настоящей статье предлагаются средства отладки программ, которые относятся ко второй категории. Эти средства поддерживают микроконтроллер Fujitsu MB90590 и входят в состав операционной системы (ОС) для данного микроконтроллера.
Схема реализации метода отладки программ на микроконтроллере показана на рис. 1.

В ПЗУ контроллера, связанного с ПК каким-либо каналом связи, записывается специальная программа, называемая монитором. Его назначение – принимать по каналу связи команды, посылаемые компьютером, и выполнять их. Любое взаимодействие с аппаратурой контроллера осуществляется через монитор, который имеет доступ к памяти и всем устройствам контроллера. В персональный компьютер загружается программа, называемая консолью управления. Она обеспечивает связь с контроллером, позволяя посылать монитору команды, которые необходимо выполнить. Командами могут быть, например, чтение или запись блока памяти, передача управления по указанному адресу, инициализация устройств контроллера и т. д. Для загрузки программы в память контроллера ее исполняемый код передается при помощи последовательности команд записи блока памяти, после чего передается команда передачи управления по ее начальному адресу.
Согласованная работа двух программ – монитора и консоли управления – является, очевидно, необходимым условием функционирования этого комплекса. Если рассматривать графы состояния обеих программ, легко видеть, что некоторые их состояния синхронизируются (рис. 2).

Для синхронизации применяется ожидание (циклический опрос канала связи), которое может быть прервано тремя событиями: успешное завершение ожидания, тайм-аут, отмена действия оператором. Два последних события могут наступить в случае сбоев, ошибок оператора, выхода из строя какого-либо компонента системы (разрыв канала связи, выключение питания контроллера) или программной ошибки.
На рис. 2 показаны графы переходов монитора и консоли управления, пунктирные стрелки обозначают синхронизацию состояний двух программ.
Как видно из рисунка, при запуске прикладной задачи (нуждающейся в отладке и тестировании) на микроконтроллере обе программы входят в специальный режим работы. Состояния, соответствующие этому режиму, обведены на рисунке пунктирными прямоугольниками. В этом режиме консоль управления и монитор меняются ролями (исполнитель/заказчик). При этом консоль управления открывает окно терминала и включает специальный интерпретатор команд, который позволяет получить доступ к этому окну из прикладной задачи, выполняемой на микроконтроллере. Тестируемая задача имеет возможность посылать команды этому интерпретатору, используя специальные библиотечные функции монитора. В результате прикладная задача получает возможность выводить сообщения (строки символов, числа) на экран ПК и считывать вводимые с клавиатуры ПК строки символов.
Терминал является чрезвычайно мощным и полезным средством отладки, которое может с успехом использоваться даже самостоятельно. При отсутствии полнофункционального отладчика он необходим, при наличии – весьма желателен. Кроме того, терминал расширяет спектр возможных применений ОС, поскольку прикладные задачи получают возможность взаимодействовать с пользователем (впрочем, указанная возможность вряд ли может понадобиться в системах реального времени).
При запуске комплексной системы отладки (см. рис. 2) пользователю доступен ряд команд, позволяющий получить нужную информацию о состоянии контроллера. Наиболее интересная возможность – просмотр и анализ содержимого оперативной и постоянной памяти контроллера. Эта возможность реализована с помощью окна дампа памяти. Дамп позволяет просмотреть любой участок адресного пространства контроллера и при необходимости изменить его содержимое. При помощи дампа памяти исследуются сегменты данных и стека загруженной программы. Если отлаживаемая программа завершилась некорректным образом, по этим данным иногда возможно восстановить ситуацию, приведшую к ошибке.
Сегмент кода программы исследуется с помощью другого средства отладки – дизассемблера. Дизассемблер позволяет восстановить исходный код программы в мнемонической форме из исполняемого машинного кода, загруженного в память контроллера. Дизассемблирование – операция, обратная ассемблированию – является, в отличие от последней, однозначно определенной. Если по одним и тем же мнемоникам языка ассемблера часто (благодаря некоторой избыточности, заложенной в архитектуре CISC-процессоров) можно сгенерировать несколько вариантов машинного кода, иногда даже отличающихся по быстродействию и эффективности, то восстановление исходного ассемблерного кода всегда однозначно.
С помощью дизассемблера можно определить, какой исполняемый код содержится в исследуемой области памяти. Часть окна дизассемблера занимает дамп соответствующего участка, который также можно редактировать. Простую программу, таким образом, можно отредактировать непосредственно в памяти контроллера, не прибегая к ассемблеру, редактору связей, конвертору объектных модулей и загрузчику программ.
В заключение рассмотрим, что представляет собой монитор, загружаемый в микроконтроллер. Настоящая реализация монитора является частью ОС, использующей тот же самый код начальной инициализации. После включения питания контроллер выполняет этот код и загружает ОС. Затем, в зависимости от конфигурационной записи, ОС вызывает либо диспетчер задач, либо монитор. Диспетчер задач используется в штатном режиме работы ОС, монитор – только при отладке прикладных программ. Переход к выполнению диспетчера задач возможен также из монитора.
Монитор представляет собой модуль, содержащий интерпретатор команд и набор функций, реализующих эти команды. Интерпретатор команд поддерживает связь с ПК через последовательный интерфейс. Для передачи данных используется специально разработанный протокол, обеспечивающий гарантированную доставку пакетов данных и контроль ошибок.
В состав набора команд входят проверка связи, чтение/запись блока оперативной памяти контроллера, выполнение прикладной задачи, перезагрузка, запуск диспетчера задач, получение информации о системе и запуск программатора флэш-памяти. Загрузка прикладной задачи осуществляется последовательностью команд записи блока памяти.
Программатор – это особый режим работы, при котором возможна запись во флэш-память (ППЗУ, перезаписываемое ПЗУ) контроллера, например, для обновления версии монитора или изменения конфигурационной записи. В этом режиме необходимая часть исполняемого кода монитора переносится в ОЗУ (это связано с особенностями организации флэш-памяти). Режим программатора во многом сходен с обычным режимом работы монитора – это интерпретатор команд, поддерживающий другой набор команд, реализующий операции перепрограммирования ППЗУ.
Выводы
В статье рассмотрены средства отладки и тестирования прикладных программ для микроконтроллера Fujitsu MB90590. К этим средствам относятся монитор и консоль управления, включающая загрузчик программ, терминал, дамп памяти и дизассемблер. Указанные средства предоставляют разработчику ПО набор необходимых инструментов для исследования поведения готовых программ непосредственно на целевой платформе – микроконтроллере MB90590.
Несмотря на то, что этих средств вполне достаточно для тестирования и отладки программ, их можно усовершенствовать и расширить, добавив встроенные ассемблер и отладчик, позволяющий выполнять программы в пошаговом режиме.


