InterruptUnmask()

Размаскировать аппаратное прерывание

Прототип:

#include <sys/neutrino.h>
int InterruptUnmask( int intr,
int id );

Аргументы:

intr
Прерывание, которое необходимо размаскировать.
id
Идентификатор, возвращаемый InterruptAttach() или InterruptAttachEvent(), либо -1, если требуется указать ядру не отслеживать количество маскирований и размаскирований для каждого обработчика.


Note: Идентификатор id игнорируется, если не использовался флаг _NTO_INTR_FLAGS_TRK_MSK при подключении обработчика.

Библиотека:

libc

Описание:

Системный вызов InterruptUnmask() размаскирует аппаратное прерывание intr для обработчика с идентификатором id, когда счётчик количества маскирований достигает нуля. Может вызваться из потока или из обработчика прерывания. Перед вызовом этой функции поток должен запросить привилегии ввода-вывода, вызвав:

ThreadCtl( _NTO_TCTL_IO, 0 );

Если поток этого не сделает, он может получить SIGSEGV при вызове InterruptUnmask().

Вызовы InterruptMask() вложенные; прерывание не размаскируется до тех пор, пока InterruptUnmask() не будет вызвана столько же раз, сколько была вызвана InterruptMask().

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

Счётчик текущего количества маскирований.

Если возникла ошибка, функция возвращает -1, код ошибки записывается в errno.

Коды ошибок:

EINVAL
Недопустимый номер прерывания intr.
ESRCH
Параметр id не является идентификатором, возвращаемым InterruptAttach(), InterruptAttachEvent() или -1.

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

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

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

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

InterruptAttach(), InterruptAttachEvent(), InterruptDisable(), InterruptEnable(), InterruptLock(), InterruptMask(), InterruptUnlock(), ThreadCtl()




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