3c05a905

Прерывания


Системы реального времени должны уметь работать с внешними устройствами. Часто желательно, чтобы real-time процесс непосредственно обрабатывал прерывания, исходящие от устройства. Эта возможность, наряду с прямым вводом-выводом и функциями проецирования памяти, позволяет пользовательскому процессу полностью контролировать устройство, исключая, таким образом необходимость написания драйвера, работающего в режиме ядра.

Управление прерываниями

Интерфейсы RTX-функций управления прерываниями позволяют приложению обслужить прерывания от устройств, соединенных с компьютером. Как и в случае процедуры-обработчика срабатывания таймера, Вы можете назначить прерыванию процедуру-обработчик.  

Win32 и RTSS процессы могут назначить такую процедуру-обработчик с помощью функции RtAttachInterruptVector. Приоритет, присвоенный потоку-обработчику, определяет приоритет исполнения обработчика прерывания в Win32 и RTSS подсистемах.  

Когда обработчик прерывания присоединяется к прерыванию, создается поток, который будет исполняться при возникновении прерывания. Процедура-обработчик прерывания в RTX аналогична Interrupt Service Routine (ISR) в драйвере устройства. Когда возникает прерывание, его источник маскируется, и, если приоритет поток-обработчик прерывания выше, чем у потока, исполняющегося в настоящий момент, начинает выполняться поток-обработчик. После возврата из обработчика источник прерываний демаскируется и поток-обработчик подвешивается (suspended).

API

Следующие функции служат для доступа к RTX-службам прерываний:

RtAttachInterruptVector – назначает поток – обработчик указанному прерыванию

RtReleaseInterruptVector - “отсоединяет” обработчик от прерывания, освобождая таким образом прерывание

RtEnableInterrupts - разрешает обработку всех прерываний, которые присоединены к процессу

RtDisableInterrupts - запрещает обработку всех прерываний, которые присоединены к процессу

Общие замечания по программированию

  • Поток-обработчик может быть в любой момент вытеснен потоком с большим приоритетом
  • Можно запретить обработку некоторых прерываний, присоединенных к RTX процессу подняв приоритет исполняющегося в настоящий момент потока.
  • Обработчик прерывания, освобождающий объект, может удовлетворить условиям wait-функции потока с более высоким приоритетом. В этом случае возобновится выполнение потока с более высоким приоритетом и завершение обработчика отложится, все это время прерывание будет маскировано
  • Прерывания от таймера никогда не маскируются прерываниями с более высоким приоритетом, поэтому они являются по существу, прерываниями с самым высоким приоритетом. Но эти прерывания маскируются с помощью RtDisableInterrupts.


  • Начало  Назад  Вперед





    Forekc.ru
    Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий