InterruptWait(), InterruptWait_r()

Ожидать аппаратного прерывания

Прототип:

#include <sys/neutrino.h>
int InterruptWait( int flags,
const uint64_t *timeout );
int InterruptWait_r( int flags,
const uint64_t *timeout );

Аргументы:

flags
Зарезервировано. Должно быть 0.
timeout
Зарезервировано. Должно быть NULL.


Note: Необходимо использовать TimerTimeout() для выхода из ожидания по тайм-ауту.

Библиотека:

libc

Описание:

Системные вызовы InterruptWait() и InterruptWait_r() ожидают аппаратного прерывания. Вызывающий поток должен иметь подключенный с помощью InterruptAttach() или InterruptAttachEvent() обработчик прерывания. Вызов InterruptWait() или InterruptWait_r() является блокирующим, начинается ожидание, пока обработчик прерывания вернет событие с типом уведомления SIGEV_INTR (т.е. аппаратное прерывание).

Функции идентичны за исключением способа возврата ошибок.

Если событие приходит до вызова InterruptWait(), устанавливается флаг ожидания. При вызове InterruptWait() происходит проверка флага и, если он установлен, флаг очищается и вызов немедленно завершается.

В многоядерной системе поток, вызывающий InterruptWait(), выполняется на любом ядре, ограничения накладываются только планировщиком и маской выполнения (см. ThreadCtl() и команду _NTO_TCTL_RUNMASK).

Состояния блокировки:

STATE_INTR
Поток ожидает, когда обработчик прерывания вернет событие SIGEV_INTR.

Возвращаемое значение:

Возвращаемое значение:

InterruptWait()
Если возникла ошибка, функция возвращает -1, код ошибки записывается в errno. Любое другое возвращенное значение считается успешным завершением.
InterruptWait_r()
При успешном завершении возвращается EOK. Функция НЕ устанавливает errno. При возникновении ошибки функция возвращает один из перечисленных ниже кодов.

Коды ошибок:

EINTR
Вызов был прерван сигналом.
ENOTSUP
Зарезервированные аргументы не NULL.
ETIMEDOUT
Вызов разблокирован по тайм-ауту. См. TimerTimeout().

Классификация:

ЗОСРВ «Нейтрино»

Безопасность использования
Точка остановки потока
Да
Обработчик прерываний
Нет
Обработчик сигналов
Да
В потоке
Да

Тематические ссылки:

InterruptAttach(), InterruptAttachEvent(), TimerTimeout()




Предыдущий раздел: Описание API системной библиотеки