Сделай Сам Свою Работу на 5

Концепции диаграммы задач





 

На диаграмме задач отображаются задачи, пакеты и связи между ними. Задача – некоторый вычислительный процесс, выполняющийся параллельно с другими. Задачи имеют функции и события. Функция является аналогом термина “процедура” в языке Ада и термина “функция” в языке С. Функции и события задач могут быть вызваны синхронно и асинхронно. За каждой задачей закреплены очереди сообщений для каждого типа функции, асинхронное сообщение на запуск которой было получено задачей. Пакет отличается от задачи тем, что не имеет основной программы и очередей сообщений, а имеет только набор функций и событий и вложенные задачи. Пример диаграммы задач приведен на рисунке 2.2.

Рисунок 2.2 – Эскиз диаграммы задач

 

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

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



Семантика отображаемых на диаграмме задач связей

 

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

 

Синхронные и асинхронные вызовы функций задач

 

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



 

Синхронный вызов функции пакета

 

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

 

События и подписки

 

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

Подписка, изображаемая на диаграмме задач, является начальной (инициализационной): ее можно изменять в процессе выполнения программы. Другими словами, подписка в языке является динамической (аналогично этому, в дизайнере форм программ для ЭВМ, например, средствами интегрированной среды разработки Microsoft Visual Studio [34] или Borland Delphi [35], пользователь рисует только первоначальную конфигурацию компонентов, но может ее менять в коде, также может в процессе выполнения подменить обработчики событий). Выполнить подписку (как и отписку) можно из любого места программного кода.



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

 

Текстовый язык

 

Разработанный текстовый язык основан на концепциях языка С и Ада. Выбор именно такой базы для предлагаемого языка обуславливается следующими причинами:

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

2) в нотацию языка С не заложено никаких средств для организации параллельного программирования.

Поэтому нотация языка является гибридом нотации языка С и Ada. Из языка Ада позаимствована нотация пакетов и задач. Таким образом, программный код представляет собой набор пакетов, функция одного из которых является точкой входа в программу. Пакеты содержат переменные, функции, задачи, события, типы данных. Задачи содержат локальные и интерфейсные переменные и функции, тело. В отличие от языка Ада, в разработанном языке нет типов задач, имеются только их экземпляры (то есть задачи не могут создаваться динамически). Данное ограничение обусловлено малым количеством ресурсов, которые доступны программе, работающей в микроконтроллере.

В качестве импортируемых ресурсов могут быть указаны как сторонние пакеты, ссылки на файлы с которыми имеются в проекте, так и файлы на языке С. Полная грамматика языка в нотации Xtext [36] приведена в приложении Б.

Вместе с концепциями пакетов и задач в дополнение к грамматике языка С были добавлены конструкции, приведенные в таблице 2.2. Пример программы на текстовом языке приведен в приложении В на рисунке В.1.

 

Таблица 2.2 – Добавленные в текстовый язык конструкции

 








Не нашли, что искали? Воспользуйтесь поиском по сайту:



©2015 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.