Raspberry Pi:Библиотеки/WiringPi/Приоритет, прерывания и потоки/Прерывания/wiringPiISR()

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.


Черновик


Функция wiringPiISR()[1]

Синтаксис

int wiringPiISR(int pin, int edgeType,  void (*function)(void));

Описание

Регистрирует функцию, которая будет запущена на указанном контакте при срабатывании прерывания. Допустимые варианты для параметра edgeType – это INT_EDGE_FALLING, INT_EDGE_RISING, INT_EDGE_BOTH или INT_EDGE_SETUP. Если вы воспользуетесь INT_EDGE_SETUP, то инициализации контакта произведено не будет, потому что в этом случае функция будет «думать», что вы инициализировали контакт где-то еще (например, при помощи программы gpio). Во всех остальных случаях контакт будет экспортирован и инициализирован в соответствии с вашими указаниями. Это выполняется вызовом программы gpio, так что заранее сделайте так, чтобы она была доступна.

Номер контакта, то есть параметр pin, указывается в соответствии с тем, в каком режиме инициализирована библиотека WiringPi – это может быть собственная распиновка WiringPi, распиновка BCM_GPIO, физическая нумерация и системный режим.

Эта функция работает в любом режиме, и ее не нужно запускать с правами root-пользователя.

Функция будет вызвана при срабатывании прерывания. Когда оно сработает, сначала будет очищен планировщик, а уже потом – запущена ваша функция. Поэтому, если перед тем, как ваш обработчик завершит работу, сработает еще одно прерывание, оно будет проигнорировано. Впрочем, эта функция может отслеживать и еще одно прерывание, но если во время работы обработчика сработает больше одного прерывания, все они будут проигнорированы.

Функция запускается с высоким приоритетом (если программа запущена с помощью sudo или с правами root-пользователя) и выполняется одновременно с главной программой. У нее есть полный доступ ко всем глобальным переменным, открытым файловым дескрипторам и т.д.

Более подробно о том, как использовать эту функцию, смотрите в программе-примере «isr.c» (ищите ее в папке «examples»).

См.также

Внешние ссылки