- •Введение
- •1 Анализ предметной области
- •1.1 Постановка задачи
- •1.2 Обзор аналогов
- •2 Программная документация
- •2.1 Техническое задание на программное обеспечение
- •2.1.1 Назначение разработки
- •2.1.2 Терминология
- •2.1.3 Требования к функциональным характеристикам
- •2.1.4 Требования к надежности
- •2.1.5 Требования к составу и параметрам технических средств
- •2.1.6 Требования к информационной и программной совместимости
- •2.1.7 Требования к результатам работы
- •2.1.7.1 Требования к комплектации решения
- •2.1.7.2 Требования к документации
- •2.1.8 Перечень работ по этапам
- •2.2 Пояснительная записка
- •2.2.1 Назначение и область применения
- •2.2.2 Описание разработанной технологии создания программ для распределенных микроконтроллерных систем
- •2.2.2.1 Схема оборудования
- •2.2.2.2 Недостатки диаграммы Бара для проектирования микроконтроллерных программ управления
- •2.2.2.3 Концепции диаграммы задач
- •2.2.2.4 Семантика отображаемых на диаграмме задач связей
- •2.2.2.5 Синхронные и асинхронные вызовы функций задач
- •2.2.2.6 Синхронный вызов функции пакета
- •2.2.2.7 События и подписки
- •2.2.2.8 Текстовый язык
- •2.2.2 Технические характеристики
- •2.2.2.1 Описание структуры программной системы
- •2.2.2.1.1 Платформа разработки
- •2.2.2.1.2 Подсистема редактирования
- •2.2.2.1.3 Разработка графических редакторов
- •2.2.2.1.4 Разработка текстового редактора
- •2.2.2.1.5 Описание языка
- •2.2.2.1.6 Семантический анализ пользовательской программы
- •2.2.2.1.7 Генерация кода на целевом языке
- •2.2.2.1.8 Генерация кода редактора текстового языка
- •2.2.2.1.9 Проектирование отладчика
- •2.2.2.1.10 Регистрация конфигурации запуска
- •2.2.2.1.11 Модель отладки
- •2.2.2.1.12 Виртуальная машина
- •2.2.2.1.13 Моделирование
- •2.2.2.1.14 Концепция параметризированных сигналов
- •2.2.2.1.15 Функциональное моделирование блоков устройств
- •2.2.3 Ожидаемые технико-экономические показатели
- •2.3 Описание программы
- •2.3.1 Описание логической структуры
- •2.3.1.2 Типичный поток событий в графическом редакторе
- •2.3.2 Входные и выходные данные
- •2.3.3 Используемые технические средства
- •2.4 Программа и методика испытаний
- •2.4.1 Программа испытаний
- •2.4.2 Методика испытаний
- •3 Руководство пользователя
- •3.2 Условия выполнения программного комплекса
- •3.3 Установка программы
- •3.4 Текстовый редактор
- •3.5 Графический редактор
- •4 Акт испытаний программного продукта
- •5 Экономическая часть
- •Заключение
- •Список использованных источников
2.2.2.1.11 Модель отладки
Ключевым моментом создания отладчика в среде Eclipse выступает разработка его модели, интерфейсы для которой в платформе уже предопределены; их схема представлена на рисунке 2.9.
Рисунок 2.9 – Диаграмма модели интерфейсов платформы отладки Eclipse
Модель отладки, представленная на рисунке, включает всевозможные виды артефактов отладки. Все артефакты должны реализовывать интерфейс IDebugElement (в дополнением к их непосредственным интерфейсам). Модель отладки включает следующие интерфейсы для артефактов отладки, приведенные в таблице 2.4.
Таблица 2.4 – Интерфейсы подсистемы отладки
Интерфейс артефакта отладки |
Назначение |
IDebugTarget |
Цель отладки - отлаживаемый контекст исполнения, такой, как процесс или виртуальная машина. |
IExpression |
Выражение - некоторый шаблон кода, значение которого может быть вычислено. |
IMemoryBlock |
Блок памяти - последовательный сегмент памяти контекста исполнения |
IRegister |
Регистры - именованная переменная в группе регистров. |
IRegisterGroup |
Группа регистров - группа регистров соответствующая фрейму стека. |
IStackFrame |
Фрейм стека - контекст исполнения в приостановленном потоке, содержащий локальные переменные. |
IThread |
Поток - последовательный набор команд исполнения в цели отладки, содержащий фреймы стека. |
IValue |
Значение переменной |
IVariable |
Переменная - видимая структура данных во фрейме стека или значении другой переменной. |
IWatchExpression |
Выражение для просмотра - выражение, которое обновляет свое значение в определенные моменты времени. |
Существует два важных замечания, которые должны быть учтены при проектировании модели отладки.
- Платформа Eclipse многопоточна, поэтому важно, чтобы все классы были потокобезопасны, в том числе те, которые сами по себе работают в одном потоке. В частности, виртуальная машина в рассматриваемом отладчике однопоточна, поэтому все методы модели отладки, которые обращаются к виртуальной машине, должны быть синхронизированы для решения задачи взаимного исключения.
- Действия, совершенные пользователем через графический интерфейс, например, команда “выполнить шаг отладки”, должны быть неблокирующими вызовами (асинхронными). То есть команда пользователя “выполнить шаг отладки” не должна ждать, пока шаг выполнится в виртуальной машине, в противном случае при длительном выполнении шага машиной поток графического интерфейса Eclipse может зависнуть. Корректная (неблокирующая) схема взаимодействие изображена на рисунке 2.10.
Рисунок 2.10 – Неблокирующая схема взаимодействия модели отладки и виртуальной машины
2.2.2.1.12 Виртуальная машина
Существует два способа исполнения пользовательской программы:
1) прямая интерпретация;
2) трансляция с отложенной интерпретацией.
Для рассматриваемой интегрированной среды разработки приемлемым является второй подход, поскольку:
1) программу на языке С невозможно разбить на независимые команды, которые можно было бы интерпретировать; во время отладки требуется исполнение всей программы;
2) процесс интерпретации может производиться много раз после единожды выполненной трансляции.
В качестве виртуальной машины, исполняющей программу, выбрана lua [46], которая исполняет программу на скомпилированном в байт-код скриптовом языке Lua. Выбор именно данной виртуальной машины обусловлен следующими соображениями:
1) виртуальная машина lua кросплатформенна: работает на Windows и UNIX-подобных операционных системах;
2) виртуальная машина высоко оптимизирована, что обеспечивает ее высокую скорость работы;
3) имеется API для использования языка Java (инструмент LuaJava [47]), который является основным языком реализации разрабатываемой системы;
4) виртуальная машина поддерживает кооперативную многопоточность пользовательских программ;
5) лицензия lua подходит как для учебного использования, так и для коммерческого.
Язык Lua является динамически типизированным языком, т. е. на этом языке тип имеют не сами переменные, а их значения, поэтому в языке отсутствуют определения типов. Для интеграции виртуальной машины lua с языком Java возможно использование библиотеки LuaJava, позволяющей скриптам на языке Lua манипулировать Java-объектами (в том числе вызывать их методы).
Важно отметить, что в языке Lua естественен принцип кооперативной многопоточности, осуществляемый за счет так называемых сопроцедур (coroutine). Использование кооперативной многопоточности объясняется малой ресурсоемкостью, в отличие от реализации многозадачности с вытеснением, поскольку для вытеснения задачи необходимо сохранять весь ее контекст. Поскольку для реализации многозадачности в микроконтроллере было решено использовать операционную систему с кооперативной многозадачностью, то наличие подобной функциональности в виртуальной машине позволяет более точно производить моделирование работы программы.