intr_capture()

Подключить обработчик прерывания (нерекомендуемый способ обработки)

Прототип:

#include <intr.h>
int intr_capture( int intr, int (* handler)( void *area ), void *area, size_t areasize );

Аргументы:

intr
Номер прерывания к которому необходимо подключить обработчик (подробнее см. InterruptAttach()).
handler
Указатель на функцию-обработчик, которая должна возвращать одно из значений:
INTR_HANDLED_NOTIFY
Прерывание обработано. Также сигнализирует о необходимости разблокировать ожидающий на intr_timed_wait() поток.
INTR_HANDLED_DO_NOT_NOTIFY
Прерывание обработано, разблокировка ожидающего потока не требуется.
INTR_NOT_HANDLED
Прерывание не обработано. Используется по умолчанию при любом ином возвращаемом значении.

Caution: Функция-обработчик прерываний имеет ряд серьезных ограничений. Подробнее см. Функция обработчика прерываний.

area
Указатель на область данных для обмена с основным процессом или NULL, если такая область не нужна.
size
Размер области данных; должен быть 0, если область NULL.

Библиотека:

libc

Описание:

Функция позволяет добавить обработчик handler() к прерыванию intr в начало очереди обаботчиков. Для успешного выполнения требуется наличие привилегий ввода-вывода.

Функция добавлена в рамках обратной совместимости с предыдущими редакциями операционной системы.


Caution: Таким способом возможно подключить не более 32 обработчиков на процесс. Данное ограничение заложено в библиотеке libc лишь для данного способа обслуживания прерываний и не относится к системным ограничениям.

Функция обслуживает внутренний список обработчиков и не поддерживает вызов в многопоточных приложениях. В этом случае требуется отдельная внешняя защита мьютексом.


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

EOK
Успешное завершение.
EAGAIN
Внутренняя очередь обработчиков переполнена, требуется освободить ресурсы с помощью intr_release().
-EAGAIN
Использованы все записи ядра о прерываниях.
-EFAULT
Ошибка при попытке ядра обратиться к предоставленным буферам.
-EINVAL
Недопустимый номер прерывания intr.
-EPERM
У процесса нет привилегий ввода-вывода.

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

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

Считается устаревшим, начиная с ЗОСРВ «Нейтрино» редакции 2021

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

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

InterruptAttach(), InterruptDetach(), InterruptMask(), InterruptUnmask(), InterruptWait(), intr_lock(), intr_release(), intr_timed_wait(), intr_unlock()




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