Spec-Zone.ru › Ada 2005
Справочник Ada 2005

D.15 События тайминга

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

Статическая семантика

Существует следующий пакет библиотеки, определённый языком:
package Ada.Real_Time.Timing_Events is
type Timing_Event is tagged limited private;
type Timing_Event_Handler
is access protected procedure (Event : in out Timing_Event);
procedure Set_Handler (Event : in out Timing_Event;
At_Time : in Time;
Handler : in Timing_Event_Handler);
procedure Set_Handler (Event : in out Timing_Event;
In_Time : in Time_Span;
Handler : in Timing_Event_Handler);
function Current_Handler (Event : Timing_Event)
return Timing_Event_Handler;
procedure Cancel_Handler (Event : in out Timing_Event;
Cancelled : out Boolean);
function Time_Of_Event (Event : Timing_Event) return Time;
private
... -- не определено языком
end Ada.Real_Time.Timing_Events;
Тип Timing_Event представляет время в будущем, когда должно произойти событие. Тип Timing_Event требует завершения (см. 7.6).
Объект типа Timing_Event считается установленным, если он связан с ненулевым значением типа Timing_Event_Handler, и очищенным в противном случае. Все объекты Timing_Event изначально очищены.
Тип Timing_Event_Handler определяет защищённую процедуру, которая должна быть выполнена реализацией, когда происходит событие тайминга. Такая защищённая процедура называется обработчиком.

Динамическая семантика

Процедуры Set_Handler связывают обработчик Handler с событием Event; если Handler равен null, событие очищается, в противном случае оно устанавливается. Первая процедура Set_Handler устанавливает время выполнения для события в At_Time. Вторая процедура Set_Handler устанавливает время выполнения для события в Real_Time.Clock + In_Time.
Вызов процедуры Set_Handler для события, которое уже установлено, заменяет обработчик и время выполнения; если Handler не равен null, событие остаётся установленным.
Как только возможно после установленного времени для события, обработчик выполняется, передавая событие в качестве параметра. Обработчик выполняется только в том случае, если событие тайминга находится в установленном состоянии в момент выполнения. Первым действием при выполнении обработчика является очистка события.
Если политика Ceiling_Locking (см. D.3) действует, когда вызывается процедура Set_Handler, выполняется проверка, что приоритет потолка Handler.all равен Interrupt_Priority'Last. Если проверка не проходит, возникает ошибка Program_Error.
Если процедура Set_Handler вызывается с нулевым или отрицательным In_Time или с At_Time, указывающим на время в прошлом, обработчик выполняется немедленно задачей, выполняющей вызов Set_Handler. Событие тайминга Event очищается.
Функция Current_Handler возвращает обработчик, связанный с событием Event, если это событие установлено; в противном случае возвращает null.
Процедура Cancel_Handler очищает событие, если оно установлено. Cancelled присваивается True, если событие было установлено до его очистки; в противном случае присваивается False.
Функция Time_Of_Event возвращает время события, если событие установлено; в противном случае возвращает Real_Time.Time_First.
В рамках завершения объекта типа Timing_Event событие Timing_Event очищается.
Если несколько событий тайминга установлены на одно и то же время, они выполняются в порядке очереди FIFO, в соответствии с их установкой.
Исключение, распространяемое от обработчика, вызванного событием тайминга, не имеет эффекта.

Требования к реализации

Для данного объекта Timing_Event реализация должна выполнять объявленные в этом пакете операции атомарно по отношению к любым из этих операций над тем же объектом Timing_Event. Замена обработчика вызовом Set_Handler должна выполняться атомарно по отношению к выполнению обработчика.

Метрики

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

Рекомендации по реализации

Защищённая процедура-обработчик должна выполняться непосредственно механизмом прерывания реального времени.
ПРИМЕЧАНИЯ
45 Поскольку вызов Set_Handler не является потенциально блокирующей операцией, его можно вызывать из обработчика.
46 Обработчик Timing_Event_Handler может быть связан с несколькими объектами Timing_Event.


Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API