Юдковский В.И. () - , Морено-пальи А.X. () - | |
Ключевое слово: |
|
Ключевое слово: |
|
|
В широком многообразии областей применения вычислительных систем особое место занимают встроенные системы. Программное обеспечение систем такого типа характеризуется комплексами программ, непосредственно входящими в контур управления и функционирующими в реальном масштабе времени. Эти особенности требуют эффективной организации вычислительного процесса, а также оснащения программистов специальными инструментальными средствами, что позволяет существенно повысить надежность и качество создаваемых программ. В данной статье рассматриваемся реализация на языке программирования Модула-2 [1] средств, ориентированных на применение в области разработки ПО для локальных встроенных систем и объединены» в специальную библиотеку модулей. Библиотека неразрывно связана с системой программирования Модула-2 и функционирует в среде ОС РВ инструментального вычислительного комплекса СМ 1420, «Электроника-100/25» и других программно совместимых типах ЭВМ. Инструментальная система используется при разработке ПО для встраиваемы к и совместимых с ними микропроцессоров типа СМ 1300, «Электроника-60» и др. Средства программирования локальных встроенных систем представляют программисту набор взаимосвязанных, описанных на Модула-2 понятий и процедур, обеспечивающих выполнение таких функций, как управление задачами, их синхронизация и обмен информацией, учет времени; обмен информацией с видеотерминалом; управление объектом. Управление задачами. Основой программирования встроенных систем является понятие «задача» — последовательно выполняемый процесс. Каждая задача однозначвт идентифицируется со своим номером-ЧИСЛОЫ в интервале от 0 до Max Task (в данной реализации Мах Task = 15). В терминах языка Модула-2 номер задачи определяется с помощью типа данных TASK. При начальном запуске всей программы Модула-2 автоматически запускается главная задача с номером 0. Запуск задачи с номером п осуществляется из главной задачи с помощью обращения к процедуре STARTTASK (п. р, size, adr), где Р — процедура, являющаяся телом запускаемой задачи, size, adr — размер и адрес начала ее рабочей области. После выполнения этой процедуры задача становится активной и выполняется параллельно с другими активными задачами. Окончание задачи с номером п из главной задачи осуществляется с помощью обращения к процедуре FJN1SHTASK (п), Обращение к функции ACTIVE(n) позволяет определить, является ли задача с номером п активной в данный момент времени. Главная задача всегда активна и используется для управления другими задачами. Функция MYTASK( )возвращает номер текущей задачи; эта функция используется в тех случаях, когда несколько задач имеют одно и то же тело. Каждая задача имеет свой приоритет, изменяющийся в данной реализации от 0 до 100 — целое значение типа PRIORITY в интервале от 0 до MAXPRIORLTY (в данной реализации MAXPRIORITY=100). Главная задача при запуске имеет среднее значение приоритета (50). Когда запускается какая-либо задача, то ей приписывается текущий приоритет запускающей (главной) задачи. Задача может установить свой приоритет равным значению Р с помощью обращения к процедуре SETPRlORITY(p). Учет, времени.. Для обеспечения работы в реальном времени используются два типа данных: DELAY для определения интервала времени, измеряемого в «тиках» таймера, и TIME для представления физического времени. С помощью процедуры SETTIME (t,d) значение переменной t типа TIME устанаваливается равным значению времени, которое наступит через «тики» таймера. Функция TOTIME (t) возвращает количество «тиков», оставшиеся до истечения времени t, или 0, если t уже истекло. Процедура PAUSE (d) приостанавливает выполнение текущей задачи на d «тиков» таймера. Для представления бесконечного значения времени, то есть времени, которое никогда не истечет, используется специальная константа ALWAYS, имеющая тип данных TIME. Синхронизация задач осуществляется с помощью абстрактного понятия «сигнал», для представления которого используется тип данных SIGNAL. Имеются две основные операции, связанные с этим понятием: послать сигнал S с помощью процедуры SEND (s) и ждать посылки сигнала S путем обращения к процедуре WAIT_£s). В этом случае, когда несколько задач одновременно ожидают посылке одного сигнала,-они становятся в очередь в порядке поступления запросов на ожидание. Посылка сирпала приводит к возобновлению первой задачи из очереди, связанной с посланным сигналом. С помощью функции AWAITED (s) можно проверить, имеются ли в данный момент времени задачи, ожидающие сигнала S. Процедура WAITTOTIME (s, (, г) используется для ожидания сигнала S до истечения времени 1. Значение переменной г устанавливается в соответствии с результатом ожидания (принят сигнал или истекло время). Обмен информацией между задачами реализован на основе концепции «рандеву», принятой в языке программирования Ада [2]. Тип данных ENTRY используется для представления понятия «вход». Вход имеет две независимые «очереди», каждая из которых однозначно идентифицируется своим номером (0 или 1). С помощью процедуры DOENTRY (e, n, v) задача может обратиться к очереди с номером п входа е, указав при этом переменную v, используемую для обмена информацией при рандеву. Процедура DOENTRY является аналогом оператора вызова входа языка Ада. Функции, аналогичные оператору условного запроса рандеву (select) языка Ада, выполняет процедура SELECTENTRY (e, isO, isl, t, adr, r), где е — вход, по которому запрашивается рандеву; isO, isl — выражения типа BOOLEAN, определяющие возможность рандеву с использованием очереди 0 и очереди 1 указанного входа; t — время ожидания рандеву; adr — адрес переменной, используемой для обмена информацией при рандеву; г — результат ожидания рандеву (истекло время t, рандеву с использованием очереди 0 или очереди 1). В случае, если рандеву состоялось, переменная adr используется для получения или посылки необходимой информации той задаче, которая обратилась к соответствующей очереди входа с помощью процедуры POENTRY. Окончание рандеву осуществляется с помощью процедуры ENDENTRY (с), где е — вход, который был ранее использован в процедуре SELECTENTRY. Естественно, такая реализация рандеву является ограниченной — одновременно может ожидаться не более двух недетерминированных событий, однако при необходимости можно реализовать аналогичные процедуры запроса рандеву с более широкими возможностями. Необходимо отметить также, что реализация концепции рандеву основана лишь на использовании механизма синхронизации задач с помощью сигналов. Имеется принципиальная возможность реализации на этой основе и других механизмов взаимодействия задач. Обмен с видеотерминалом. Экран видеотерминала разделяется на несколько прямоугольных областей, называемых «окнами». Для ввода информации с клавиатуры видеотерминала используется специальное окно, занимающее всю нижнюю строку экрана, остальные окна используются для вывода информации на экран. Каждое окно идентифицируется своим номером (тип данных WINDOW). В данной реализации может использоваться до 40 различных окон. При работе с окнами используются процедуры OPENWINDOW, WRITECHAR, WRITE-LINE, NEWLINE, OPENREADER. READCHAR, READLINE, CLOSEREADER. Управление объектом. Средства управления объектом обеспечивают взаимодействие между задачами и устройствами дискретного и аналогового ввода-вывода. При этом предполагается, что инициативными, то есть использующими аппаратные прерывания, являются ЛИШ11 устройства дискретного ввода. Реализация таких средств существенно зависит от номенклатуры используемых устройств и их физических характеристик. Для решения этой проблемы вводится понятие «логическое устройство». Каждое логическое устройство в программе однозначно характеризуется своим номером, числом в интервале от 0 до некоторого максимально допустимого значения, определяемого реализацией. В соответствии с классами устройств их логические номера предсталаются следующими типами данных: DIN — дискретный ввод, DOUT — дискретный вывод, AIN — аналоговый ввод, AOUT — аналоговый вывод. Для каждой задачи определяется своя локальная нумерация логических устройств всех классов, поэтому задача имеет дело лишь со сравнительно небольшим количеством логических устройств каждого класса — с теми, взаимодействие с которыми она непосредственно осуществляет. Вывод информации на устройство выполняется с помощью процедуры DWRITE (dout, v) для дискретного вывода и процедуры AWRITE (aout, v) для аналогового вывода, где dout, aout — локальный номер логического устройства вывода задачи, v — выводимое значение. Ввод информации выполняется с помощью процедур DREAD (din, v) и AREAD (am, v) где din, ain — локальный номер логического устройства ввода задачи; v — переменная, в которую вводится значение. Для обработки прерываний от устройств дискретного ввода используется процедура TAKETOTIME (t, г), которая приостанавливает выполнение задачи до возникновения прерывания от любого локального логического устройства дискретного ввода задачи или до истечения времени t. После выполнения этой процедуры переменная г содержит код причины окончания ожидания, Реализация и использование. Описанные средства представлены в виде набора раздельно компилируемых модулей на языке программирования Модула-2. Общий объем исходного текста модулей составляет около 1000 строк. Как уже говорилось, процесс разработки ПО с помощью данных средств осуществляется на инструментальной ЭВМ типа СМ 1420 с использованием системы программирования Модула-2 в среде ОС РВ и в целом аналогичен обычному процессу разработки независимых программ Модула-2 [1]. Полученный файл «загрузочных» кодов программы Модула-2 преобразуется затем в формат LDA, используемый абсолютным загрузчиком, для переноса на встроенную ЭВМ. При необходимости получения ПО, пригодного к размещению в ПЗУ, применяется специальный компоновщик программ Модула-2, размещающий все переменные, используемые в программе, в отдельной области, границы которой задаются. Реализация средств управления объектом с использованием логических устройств обеспечивает разработанному ПО существенную независимость от конкретных физических характеристик аппаратуры. Однако такое решение предполагает наличие дополнительной информации, определяющей связь логических устройств с их физическим представлением. Такая информация формируется специальной программой ASSIGN, Входными данными программы являются сведения о конфигурации и параметрах используемых технических средств: количество устройств, адреса их аппаратных регистров, распределение устройств между задачами и т. д. Эта информация вводится в интерактивном режиме, контролируется и на ее основе формируется специальный файл в формате LDA, обеспечивающий поддержку программы Модула-2 в период ее выполнения. Программа ASSIGN также разработана на языке Модула-2 и функционирует на инструментальной ЭВМ в операционной системе ОС РВ. Таким образом, разработанное с помощью описанного инструментария, ПО встроенной системы представляется двумя файлами в формате LDA, содержащими коды собственно программы Модула-2 и коды системы поддержки. Общий объем памяти, необходимый для размещения созданной вычислительной среды (без учета программы пользователя), составляет около 7 Кбайтов ПЗУ и 1 Кбайта ОЗУ. Описанные средства программирования использовались для разработки программ управления оборудованием по производству интегральных схем. Анализ результатов их применения позволяет сделать следующие выводы: производительность труда программиста при разработке ПО встроенных систем повышается в 2-3 раза по сравнению с программированием на ассемблере; существенно упрощается процесс сопровождения ПО, в том числе и процесс модификации; реактивность разработанных программ вполне достаточна для управления механическими и пневматическими устройствами (время реакции на прерывание не превышает 1 мс). Предполагается дальнейшее развитие функциональных возможностей разработанных средств, в частности, реализация функций межмашинного обмена. Список литературы 1.йирт Н Программирование на языке Модула-2/Пер с англ — М.: Мир, 19в7. — 224 с. 2. пайл Я. Дда — язык встроенных системТир. с англ — м : Финансы и статистика, 198-1. — 23S с |
http://swsys.ru/index.php?id=1401&lang=.&page=article |
|