Спецификатор адреса задает адрес в памяти для понятия.
спецификатор - адреса :: = for простое-имя use at простое-выражение;
Выражение после зарезервированного слова at должно быть типа ADDRESS, определенного в пакете SYSTEM (см. 13.7). Этот пакет должен быть именован в спецификаторе совместности компилируемого модуля, в котором помещается спецификатор адреса. Условия, определяющие интерпретацию значения типа ADDRESS как адреса, уровня прерывания или чего-либо другого, зависят от реализации. Ниже перечислены допустимые толкования простого имени и смысл соответствующего адреса:
а) имя объекта: требуемый адрес — адрес объекта (переменной или константы);
б) имя подпрограммы, пакета или задачного модуля: требуемый адрес — адрес машинного кода, связанного с телом программного модуля;
в) имя одиночного входа: адрес задает аппаратное прерывание, связанное с этим входом. Если простое имя — это имя одиночной задачи, то спецификатор адреса относится к задачному модулю, а не к задачному объекту. Во всех случаях спецификатор адреса является правильным только тогда, когда точно одно описание с этим идентификатором помещено раньше непосредственно в том же разделе описаний, спецификации пакета или спецификации задачи. В качестве простого имени недопустимо имя, введенное описанием переименования.
Спецификаторы адреса не могут быть использованы для задания перекрытия объектов или перекрытия программных модулей. Данное прерывание может быть связано не более чем с одним входом. Любая программа, использующая такой спецификатор адреса, ошибочна.
Пример:
for CONTROL use at 16#0020#; -— предполагается, что SYSTEM.ADDRESS -- это некоторый целый тип
Примечание. Из приведенных правил следует, что если в данной точке программы видимы две совмещенные подпрограммы, то спецификатор адреса для каждой из этих подпрограмм является неправильным в данной точке. Аналогично если в спецификации задачи описаны совмещенные друг с другом входы, то они не могут быть входами прерываний. Для библиотечного модуля синтаксис не допускает спецификатора адреса. Реализацией могут быть определены прагмы для обеспечения оверлейных перекрытий программ.
Ссылки: библиотечный модуль 10,1, вход 9.5, выражение 4.4, задачный модуль 9, задачный объект 9.2, зарезервированное слово 2.9, имя 4.1, компилируемый модуль 10.1, константа 3.2.1, объект 3.2, ошибочна 1.6, пакет 7, пакет SYSTEM 13.7, переменная 3.2.1, подпрограмма 6, понятие 3.1, прагма 2.8, предопределенный тип ADDRESS 13.7, применим 10.1.1, программный модуль 6, простое выражение 4.4, простое имя 4.1, спецификатор совместности 10.1.1, тело задачи 9.1, тело подпрограммы 6.3, тип 3.3.
13.5.1. ПРЕРЫВАНИЯ
Спецификатор адреса для входа сопоставляет вход с некоторым устройством, которое может вызвать прерывание; такой вход в этом разделе называется входом по прерыванию. Если прерывание сопровождается управляющей информацией, то она передается соответствующему входу по прерыванию как один или несколько параметров входа вида in; допустимы параметры только такого вида.
Прерывание действует как вызов входа некоторой связанной с оборудованием задачи, приоритет которой выше приоритета главной программы и любых определенных пользователем задач (т.е. любой задачи, тип которой описан с помощью задачного модуля в программе). Вызов входа может быть обычным, временным или условным вызовом входа в зависимости от вида прерывания и от реализации.
Если оператор отбора содержит как альтернативу завершения, так и альтернативу принятия входа по прерыванию, то реализация может наложить некоторые дополнительные требования на отбор альтернативы завершения в дополнение к требованиям, сформулированным в разд. 9.4.
Пример:
task INTERRUPT_HANDLER is entry DONE; for DONE use at 16#40#; -- предполагается, что SYSTEM. ADDRESS -— это некоторый целый тип end INTERRUPT_HANDLER;
Примечание. Вызовы входа по прерыванию имеют только описанную выше семантику;они могут быть реализованы с помощью аппаратуры, непосредственно выполняющей соответствующие операторы принятия.
Выстраиваемые в очередь прерывания соответствуют обычным вызовам входа. Прерывания, которые теряются или немедленно не обрабатываются, соответствуют условным вызовам входов. Из правил приоритетов следует, что оператор принятия, выполняемый в ответ на прерывание, имеет более высокий приоритет, чем определенные пользователями обычные задачи, и может быть выполнен без задачи, выполняющей планировку.
Одним из возможных результатов указания спецификатора адреса для входа по прерыванию является спецификация (непосредственно или косвенно) приоритета прерывания. Допустимы прямые вызовы входов по прерыванию.
Ссылки: альтернатива завершения 9.7.1, альтернатива отбора 9.7.1, альтернатива принятия 9.7.1, вид 6.1, временной вызов входа 9.7.3, вход 9.5, выход входа 9.5, допустим 1.6, задача 9, оператор отбора 9.7, оператор принятия 9.5, пакет SYSTEM 13.7, параметр подпрограммы 6.2, предопределенный тип ADDRESS 12.7, приоритет задачи 9.8, условный вызов входа 9.7.2.