Приоритеты прерываний: Прерывания и особые ситуации: Приоритеты прерываний

Содержание

11.3. Приоритеты прерываний

Одновременно может возникать несколько запросов на прерывание, поэтому микропроцессор должен обслуживать их в соответствии с приоритетом. Сначала обслуживаются прерывания с высоким приоритетом, а затем – с более низким. Максимальный приоритет соответствует уровню 0 и убывает с возрастанием номера.

Высший приоритет имеют исключения деления, точки останова и переполнения и программные прерывания. Они взаимно исключают друг друга, т.е. могут произойти при выполнении только определённых инструкций микропроцессора. Поэтому ситуации, когда необходимо обслужить одновременно несколько прерываний этих видов, возникнуть не может. Затем по приоритету следует немаскируемое внешнее прерывание, и потом маскируемые внешние прерывания. Самый низкий приоритет имеет трассировочное прерывание.

11.4. Контроллер прерываний 8259

Внешние устройства не выдают запросы прерываний напрямую микропроцессору, а передают их специальной микросхеме –

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

В IBM PC совместимых устройствах используется микросхема программируемого котроллера прерываний Intel 8259 (отечественный аналог КР580ВН59 или КР1810ВН59А) для обслуживания запросов прерываний от различных устройств. Контроллер обеспечивает восемь векторов.

Запрос на прерывание обозначается как IRQ (Interrupt Request) с соответствующим порядковым номером. Для IBM PC XT существует 8 уровней приоритетов, а для IBM PC AT и последующих серий – 16. Обращения к соответствующим уровням обозначаются сокращениями от IRQ0 до IRQ7 (или от IRQ0 до IRQ15), что означает запрос на прерывание.

Микросхемы контроллера прерываний можно объединять (каскадировать) для увеличения количества уровней приоритетов. При этом общее число уровней прерываний будет достигать 64. Запросы на прерывание 0-7 соответствуют векторам прерываний от 8H до 0FH, запросы на прерывания 8-15 – векторами от 70H до 77H. В табл. 92 приведены назначения этих прерываний.

Табл. 92. Аппаратные прерывания в порядке приоритета.

Номер

IRQN

Описание прерывания

8

IRQ0

Прерывание таймера, возникает с частотой 18.2 Гц.

9

IRQ1

Прерывание от клавиатуры. Генерируется при нажатии и отпускании клавиши. Используется для чтения данных от клавиатуры.

A

IRQ2

Каскадирование аппаратных прерываний.

70

IRQ8

Прерывание от часов реального времени.

71

IRQ9

Прерывание от контроллера видеоадаптера.

72

IRQ10

Зарезервировано.

73

IRQ11

Зарезервировано.

74

IRQ12

Зарезервировано.

75

IRQ13

Прерывание от математического сопроцессора.

76

IRQ14

Прерывание от контроллера жесткого диска.

77

IRQ15

Зарезервировано.

B

IRQ3

Прерывание асинхронного порта COM2.

C

IRQ4

Прерывание асинхронного порта COM1.

D

IRQ5

Прерывание от контроллера жесткого диска.

E

IRQ6

Прерывание контроллера флоппи-диска по завершении операции.

F

IRQ7

Прерывание принтера. Генерируется принтером,

когда он готов к выполнению очередной операции.

Микросхема 8259 имеет три однобайтовых регистра, которые управляют 8 линиями аппаратных прерываний (рис. 42). Регистр запроса на прерывание IRR (Interrupt Request Register) устанавливает соответствующий бит, когда линия прерывания сигнализирует о запросе. Затем проверяется, не обрабатывается ли другое прерывание. Для этого контроллер запрашивает информацию от регистра обслуживания ISR (Interrupt Service Register). Регистр использует адреса портов 20h и A0h для первого и второго контроллера 8259 соответственно.

Перед вызовом прерывания проверяется регистр маски прерываний (Interrupt Mask Register, IMR), чтобы узнать, разрешено ли в данный момент прерывание данного уровня. Проверка связана с тем, что некоторые программы нежелательно прерывать, и они могут запретить аппаратные прерывания. Запрещение всех аппаратных прерываний необходимо при выполнении критических участков программного кода, а также при изменении вектора прерывания, чтобы избежать выполнения прерывания, когда вектор изменен только наполовину.

Рис. 42. Схема обработки аппаратного прерывания.

Регистр IMR определен за адресами 21h или A1h и предназначен только для записи. Если бит в этом порту установлен в 1, то прерывание с соответствующим номером будет запрещено. Для запрета определенных аппаратных прерываний следует установить биты регистра IMR, соответствующие номерам прерываний, выбранным для маскирования.

По завершении подпрограммы обработки прерывания разряд ISR должен быть установлен в нулевое состояние, соответствующий последнему обслуженному запросу с тем, чтобы была разрешена обработка прерываний с более низкими приоритетами, чем только что обработанное.

Для этого в регистр ISR должен быть передан код 20h.

Регистр ISR позволяет получить содержимое регистров ISR и IRR. Код команды чтения регистра ISR равен 0Ah, регистра IRR – 0Bh. После выполнения команд содержимое регистров ISR и IRR доступно из портов 20h и A0h соответственно. Для получения содержимого регистра IMR необходимо выполнить чтение портов с адресами 21h или A1h.

Системы приоритетов прерываний · Ответы на экзаменационные вопросы [ОргЭВМ, 2017, Холод]

# Вопрос 60: Системы приоритетов прерываний

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

Второй механизм – с относительным приоритетом. В этом случае все прерывания имеют свой приоритет, который у них отличается. Пусть мы имеем три прерывания A,B и С, которые имеют приоритеты а>b>c. Пусть возникло прерывание B. Процессор перешел к программе его обработки. В время обработки возникли запросы на прерывания сначала С, затем А. Обработка прерывания B не была прервана и программа обработки прерывания B доработала до конца. Теперь, несмотря на то, что запрос на прерывание C пришел раньше, чем на A, происходит переход к обработке прерывания A, потому что оно обладает более высоким приоритетом (рисунок ниже).

Третий механизм – механизм с абсолютным приоритетом. Пусть у нас есть два источника прерывания A и B. С приоритетами a>b. Пусть поступил запрос на прерывание B. Процессор приступил к программе его обработки. В это время поступило прерывание A. Процессор прерывал программу по обработке прерывания B и перешел к обработке прерывания A. По окончании программы обработки прерывания A процессор вернулся и закончил обработку прерывания B.

В некоторых системах существует сложный механизм динамического изменения прерываний, то есть после выполнения некоторого прерывания его приоритет падает. Такие системы прерываний называются полинговыми. Пусть у нас есть три прерывания A,B,C с динамическими приоритетами a>b>c. Произошло прерывание A, и процессор его обработал. Теперь мы имеем приоритеты b>c>a. В некоторых случаях приоритет прерывания повышается с течением времени. Полинговые системы прерываний применяются в системах, где количество прерываний велико или велика частота их возникновения. При статических приоритетах может возникнуть ситуация, когда прерывание с низким приоритетом никогда не будет обработано, так как его постоянно будут вытеснять другие с более высоким приоритетом. Полинговые системы решают эту проблему.

Страдания по IRQ — Ferra.ru

Как видно из таблицы, свободных прерываний практически не осталось. Свободными можно считать только IRQ 5 и 10, всё остальное занято. По логике, как раз их-то и надо использовать для видеокарты и аудиоплаты. Но устройств, требующих собственное прерывание и не описанных в этой таблице, может быть куда больше. В таблицу они не включены, так как являются опциями, то есть могут быть в системе, а могут и не быть. Например: сетевая карта, контроллер RAID или SCSI, ТВ-тюнер, SATA, IEEE1394 (FireWire) и так далее. То есть, может сложиться ситуация, когда на два свободных прерывания будет восемь устройств, требующих собственного прерывания.  Есть три способа решения этой проблемы. Каждый способ имеет свои плюсы и минусы.

Первый способ – это  полноценное использование систем ACPI и IRQ Sharing. Если системы ACPI, а соответственно и APIC, включены, то операционная система считает, что у неё 256 прерываний, при этом реальных прерываний как было 16, так и осталось. Оставшиеся 240 прерываний – это  виртуальные прерывания, которые являются клонами реальных. ACPI автоматически распределяет прерывания и не позволяет пользователю их менять. Если устройство соглашается работать в режиме кооперации с другим устройством, то есть все шансы, что ACPI посадит их на одну физическую линию.  Если не контролировать данную ситуацию, то на одном физическом прерывании могут оказаться практически все устройства, установленные в компьютере, даже если есть свободные прерывания. Это приведет к сильнейшему торможению всей системы и серьезным сбоям в работе.

Решение:
Плюс данного подхода в отсутствии потребности вмешательства со стороны пользователя. То есть, делать ничего не надо. Просто воткнуть в материнскую плату видеоадаптер, процессор, память и так далее, а затем поставить операционную систему, которая нормально поддерживает ACPI. А это Windows XP или Windows 2000. Всё. Компьютер заработает. Именно в таком виде продаются почти все компьютеры, собранные в России. Подход прост: если работает и тормозит – то  это не гарантийный случай, а проблема пользователя.

Второй способ заключается в отказе от использования ACPI и APIC, но с параллельным использованием IRQ Sharing. Отказ от систем ACPI и APIC означает , что операционная система знает о наличии у неё только 16 прерываний, а не 256, но система IRQ Sharing позволяет находиться на одном прерывании нескольким устройствам. При этом отслеживать картину прерываний уже можно, и выбирать соседей по своему усмотрению — тоже. То есть, если у вас есть сетевая плата и звуковая карта, и при этом нужны все порты ввода-вывода установленные в материнскую плату, то от IRQ Sharing уже никак не отделаться.

Решение:
Современные материнские платы обладают некоторыми особенностями, которые необходимо знать для корректного разведения линий прерываний по устройствам. Так, все встроенные в материнскую плату устройства чаще всего имеют жесткую привязку к слотам расширения PCI, а некоторые слоты жестко привязаны друг к  другу. К примеру, у вас есть встроенная в материнскую плату звуковая карта, при этом она автоматически кооперируется с устройством в третьем слоте PCI. Если вы вставите сетевую плату в третий слот, то встроенная звуковая карта и сетевая плата будут висеть на одном прерывании, чтобы вы ни делали. Решить этот конфликт можно, переставив сетевую карту в другой слот. Или другой пример: пятый и первый слот PCI привязаны друг к другу, и установив два устройства в эти слоты, вы автоматически вешаете их на одну линию прерывания. Опять же, это лечится переустановкой одного из  устройств в другой слот. К сожалению, современные материнские платы имеют столько встроенных устройств, что найти свободный слот PCI без запаралеленных устройств бывает невозможно. В этом случае всё зависит от устройства.

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

К первой группе можно отнести видеокарту и контроллеры жестких дисков. Эти устройства должны иметь выделенное прерывание и ни в коем случае не должны его делить с чем бы то ни было. То есть, на одном прерывании с видеокартой не должно находиться ни одного устройства, в противном случае страшные глюки и тормоза гарантированы. Ко второй группе можно отнести менее ресурсоемкие устройства, например аудиоплату, ТВ-тюнер, софтверный внутренний модем (WinModem) или сетевую карту. Эти устройства могут сосуществовать на одном прерывании с устройствами из групп, которые мы опишем ниже. Тем не менее, если есть возможность, устройства, относящиеся ко второй группе, тоже желательно разместить на отдельном прерывании, так как при серьезной нагрузке возможны различные сбои. Вторая группа — эта зона риска, так как абсолютно непонятно, какое устройство с каким может войти в конфликт при использовании уже задействованных ими прерываний. Стабильность в этом случае достигается методом проб и ошибок. Единственное, что можно сказать однозначно – на одном прерывании не стоит размещать два устройства второй группы, это приведет к сбоям в работе. Третья группа — это все порты ввода вывода, USB, COM-порты, возможно LPT, IEEE1394 (FireWire), аппаратные внутренние модемы и прочие устройства не сильно загружающие компьютер. Устройства из третьей группы могут присоединяться к устройствам из второй и к самим себе. То есть, на одном прерывании могут висеть все порты USB или же один порт USB висит вместе с аудиокартой или ТВ-тюнером. Также можно повесить контроллер FireWire вместе с USB или СOM портом. Ну а четвертая группа — это устройства, не требующие прерываний. Это довольно редкая группа, и тем не менее, она существует. Например, к этой группе относились ускорители трехмерной графики от 3dfx – Voodoo и Voodoo 2. Да, кстати, если вдруг вы видите что у вашей видеокарты или USB-портов прерывание отсутствует (буковки NA — то есть Not Available), то это не значит что у вас такая редкая, хорошая видеокарта. Это с большой долей вероятности значит, что у вашего компьютера проблемы, которые надо решать немедленно. У устройств, не требующих прерывания, в инструкции об этом написано большими буквами.

Надо понимать, что все вышеперечисленные устройства могут обладать уникальными свойствами в зависимости от производителя или прошивки. Все вышеописанные правила работают не всегда и не однозначно. У вас легко может оказаться ТВ-тюнер или сетевая карта, которая напрочь откажется работать с кем-либо в паре. Или наоборот, ваша звуковая карта может вдруг повести себя стабильно на одном прерывании вместе с ТВ-тюнером. Конфликтовать умеют даже устройства, относящиеся к четвертой группе. Чаще всего они начинают глючить, если поставить их в запаралеленный с AGP слот.  При этом на понимание всех особенностей конкретно вашего железа может уйти значительное время.

Пожалуй, второй способ — самый часто используемый. При некотором понимании вопроса можно создать практически безглючный компьютер, в котором все устройства, установленные в него, будут функционировать. Минусом второго способа является потеря функций ACPI и наивысшая из всех способов сложность. Для рядового пользователя достижение нормальных результатов может занять долгое время и вызовет сильный перегруз мозгов. Плюс к этому, компьютер больше не будет сам выключаться (его придется выключать кнопкой «Power») и не будет засыпать. Что же касается режима Hybernate, то он полностью сохранит свою функциональность.

Третий способ  — самый правильный, но требует жертв.

Суть способа в полном отказе от систем ACPI и IRQ Sharing. А устройства, которые лезут на одну линию IRQ нужно просто отключать. Must be only one!, как говорил товарищ из фильма «Горец».

Решение:
Для начала нужно отключить все порты, которые не используются. Не пользуетесь LPT – отключить. Не пользуетесь вторым COM-портом и дополнительными USB-каналами – та же судьба, отключить. Каждое устройство должно иметь отдельное прерывание и ни с кем не пересекаться. Это вопрос приоритетов и потребностей, потому что при использовании данного способа половина компьютера оказывается «в отключке», зато всё остальное работает как часы. Плюс этого способа в возможности использования устаревших операционных систем и сложных программ. Например, для установки WindowsNT 4.0 на достаточно сложную машину этот способ просто необходим. Также плюс такого подхода — максимальное быстродействие всей системы без проблем со стабильностью. Если есть возможность, желательно идти именно этим путем.

Как установить приоритеты прерываний в Arduino?



Я работаю над ESP8266. И я программирую его непосредственно через FTDI, используя Arduino IDE. У меня возникают проблемы со стеком, когда прерывание GPIO и UART происходит одновременно или событие GPIO происходит, когда UART что-то отправляет или получает. Можно ли установить приоритеты прерываний на Arduino?.

arduino uart gpio esp8266
Поделиться Источник G.Ornill     09 ноября 2016 в 19:15

2 ответа


  • Arduino шифратор прерываний развращает последовательной передачи данных

    У меня есть Arduino Мега, подключенный к 6-осевому роботизированному arm. Все 6 прерываний подключены к кодерам (один вывод Кодера на прерывании, другой на ванильном цифровом входе). Прерывания обрабатываются с помощью этого кода: void readEncoder1(){ //encoders is a 2d array, where the first d is…

  • Продолжают ли часы Arduino (Миллис) отсчет в фоновом режиме во время прерываний?

    У меня есть быстрый вопрос, который, по-видимому, не говорится в интернете из того, что я читал: я знаю, что millis() на Arduino не меняется во время пользовательского прерывания, но соответствующий таймер все еще считается в фоновом режиме ? Моя программа чувствительна ко времени, и я хотел бы. ..



3

Интеррумпты в Arduino имеют заранее определенный порядок приоритета, который не может быть изменен. Вот есть:

 1  Reset
 2  External Interrupt Request 0  (pin D2)          (INT0_vect)
 3  External Interrupt Request 1  (pin D3)          (INT1_vect)
 4  Pin Change Interrupt Request 0 (pins D8 to D13) (PCINT0_vect)
 5  Pin Change Interrupt Request 1 (pins A0 to A5)  (PCINT1_vect)
 6  Pin Change Interrupt Request 2 (pins D0 to D7)  (PCINT2_vect)
 7  Watchdog Time-out Interrupt                     (WDT_vect)
 8  Timer/Counter2 Compare Match A                  (TIMER2_COMPA_vect)
 9  Timer/Counter2 Compare Match B                  (TIMER2_COMPB_vect)
10  Timer/Counter2 Overflow                         (TIMER2_OVF_vect)
11  Timer/Counter1 Capture Event                    (TIMER1_CAPT_vect)
12  Timer/Counter1 Compare Match A                  (TIMER1_COMPA_vect)
13  Timer/Counter1 Compare Match B                  (TIMER1_COMPB_vect)
14  Timer/Counter1 Overflow                         (TIMER1_OVF_vect)
15  Timer/Counter0 Compare Match A                  (TIMER0_COMPA_vect)
16  Timer/Counter0 Compare Match B                  (TIMER0_COMPB_vect)
17  Timer/Counter0 Overflow                         (TIMER0_OVF_vect)
18  SPI Serial Transfer Complete                    (SPI_STC_vect)
19  USART Rx Complete                               (USART_RX_vect)
20  USART, Data Register Empty                      (USART_UDRE_vect)
21  USART, Tx Complete                              (USART_TX_vect)
22  ADC Conversion Complete                         (ADC_vect)
23  EEPROM Ready                                    (EE_READY_vect)
24  Analog Comparator                               (ANALOG_COMP_vect)
25  2-wire Serial Interface  (I2C)                  (TWI_vect)
26  Store Program Memory Ready                      (SPM_READY_vect)

Подробнее см. здесь .

Поделиться Dat Ha     09 ноября 2016 в 20:32



0

Немного старая, но платформа ESP имеет только 2 уровня приоритета, самый высокий-для WiFi. Uart и Gpio имеют одинаковый уровень. Может быть, вы слишком долго занимаетесь рутиной прерываний. Не используйте uart в процедуре передачи прерываний gpio.

Поделиться lalo-uy     21 июня 2020 в 14:37


Похожие вопросы:


Как установить обработчик прерываний для IPI в powerpc с помощью MPIC?

Позволяет ли CPUs (в частности, powerpc) устанавливать обработчик прерываний для IPIs (межпроцессорных прерываний)? MPIC, который я использую, поддерживает 4 IPIs на ядро, и у него есть регистры для…


Arduino: аргумент типа ‘void (ClassName::)()’ не соответствует ‘void ( * ) ()’ при присоединении прерываний

Возможный Дубликат : Как передать указатель функции-члена? Поэтому я написал несколько библиотек для Arduino, чтобы обрезать довольно большой эскиз, над которым я работал. Все работает до сих пор,…


Как VxWorks расставляет приоритеты между нижними половинами прерываний?

Предположим, у меня есть две задачи, ‘A’ и ‘B’, с разным приоритетом, выполняемые на SMP-поддерживаемом VxWorks. И ‘A’, и ‘B’ выдают команду устройству ввода-вывода (например, диску или NIC), и оба…


Arduino шифратор прерываний развращает последовательной передачи данных

У меня есть Arduino Мега, подключенный к 6-осевому роботизированному arm. Все 6 прерываний подключены к кодерам (один вывод Кодера на прерывании, другой на ванильном цифровом входе). Прерывания…


Продолжают ли часы Arduino (Миллис) отсчет в фоновом режиме во время прерываний?

У меня есть быстрый вопрос, который, по-видимому, не говорится в интернете из того, что я читал: я знаю, что millis() на Arduino не меняется во время пользовательского прерывания, но соответствующий…


Приоритеты в пространстве kernel

Мой вопрос касается kernel космического программирования. Предположим, что у нас есть 2 обработчика для: — аппаратное прерывание — /proc файл Возможно ли во время выполнения аппаратного обработчика…


Прерывание с SoftwareSerial на Arduino

Я использую профиль последовательного порта Bluetooth для связи с Arduino. Модуль bluetooth (HC-06) подключен к моим цифровым контактам 10 и 11 (RX, TX). Модуль работает нормально, но мне нужно…


Программируя Arduino в C, будут ли работать векторы прерываний?

У меня есть Arduino, чтобы играть с ним… но язык Arduino и IDE кажутся мне детскими игрушками. Поэтому я хотел бы использовать обычный C для его программирования. Как я понимаю, загрузчик сидит в…


Как установить приоритеты для нескольких потоков в java

Как установить разные приоритеты для разных потоков на JAVA? Предположим, у меня есть три потока A,B, C..and я хочу, чтобы A имел высокий приоритет.. Как установить значение приоритета в каждом…


ARM приоритеты прерываний Cortex-M4

Я использую ARM Cortex M4 MCU. Если у меня есть обработчик прерываний для GPIO с приоритетом 2 и драйвер SPI с приоритетом 3 (т. е. более низкий приоритет, чем у GPIO), и я вызываю (блокирующее) SPI…

Система прерываний микроЭВМ МК51

Система прерываний микроЭВМ МК51

   ФИКСАЦИЯ ЗАПРОСОВ НА ПРЕРЫВАНИЯ

    Запросы на прерывания фиксируются в регистрах специальных функций микроконтроллера: флаги IE0, IE1, TF0, TF1 запросов на прерывания от INT0, INT1, T/C0 и T/C1 соответственно содержатся в регистре управления TCON, а флаги RI и TI запросов на прерывание от последовательного порта — в регистре SCON управления последовательным портом.
Блок
таймеров/счетчиков
Последовательный
порт

    Флаги TF0 и TF1 устанавливаются аппаратно при переполнении соответствующего таймера/счетчика (переход T/C из состояния «все единицы» в состояние «все нули»). Флаги IE0 и IE1 устанавливаются аппаратно от внешних прерываний INT0 и INT1 соответственно. Внешний запрос может вызвать установку флага либо при низком уровне сигнала на соответствующем входе, либо при переходе этого сигнала с высокого на низкий уровень (с частотой, не превышающей половины частоты внешней синхронизации микроЭВМ).

   НАСТРОЙКА СИСТЕМЫ ПРЕРЫВАНИЙ

    Настройка на тип запроса осуществляется программной установкой бит IT0 и IT1 в регистре TCON. IT=0 настраивает систему прерывания на запрос по низкому уровню сигнала, IT=1 — на запрос на прерывание по спаду сигнала. Флаги TI и RI устанавливаются аппаратно после окончания передачи или приема байта схемой последовательного интерфейса соответственно. Все указанные флаги запросов на прерывания программно доступны для установки и сброса. Программная установка флага запроса на прерывание приводит к такой же реакции микроЭВМ, что и аппаратная установка того же самого флага. Флаги TF0 и TF1 сбрасываются аппаратно при передаче управления программе обработки соответствующего прерывания. Сброс флагов IЕ0 и IЕ1 выполняется аппаратно при обслуживании прерывания только в том случае, если прерывание было настроено на восприятие спада сигнала IT. Если прерывание было настроено на восприятие уровня сигнала запроса, то сброс флага IE должна выполнять программа обслуживания прерывания, воздействуя на источник прерывания для снятия им запроса.

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

Мнемоника
бита
Позиция
в регистре
Функция
EA IE.7 Запрет прерываний от всех источников
IE.6 Hе используется
IE.5 Hе используется
ES IE.4 Запрет прерывания от последовательного порта
ET1 IE.3 Запрет прерывания от таймера/счетчика T/C1
EX1 IE. 2 Запрет прерывания от внешнего источника INT1
ET0 IE.1 Запрет прерывания от таймера/счетчика T/C0
EX0 IE.0 Запрет прерывания от внешнего источника INT0

    Каждому виду прерывания может быть программно присвоен один из двух возможных приоритетов: 0 — низший, 1 — высший. Настройка приоритетов осуществляется путем установки или очистки соответствующего бита регистра приоритетов прерываний IP.

Мнемоника
бита
Позиция
в регистре
Функция
IP. 7 Hе используется
IP.6 Hе используется
IP.5 Hе используется
PS IP.4 Приоритет прерывания от последовательного порта
PT1 IP.3 Приоритет прерывания от таймера/счетчика T/C1
PX1 IP.2 Приоритет прерывания от внешнего источника INT1
PT0 IP.1 Приоритет прерывания от таймера/счетчика T/C0
PX0 IP.0 Приоритет прерывания от внешнего источника INT0

    При одновременном поступлении запросов прерывания от источников, имеющих различные приоритеты, сначала обрабатывается запрос от более приоритетного источника. В случае одновременного поступления нескольких запросов на прерывания с одинаковым приоритетом порядок их обработки определяется аппаратными средствами микроЭВМ и не может быть изменен программно. Этот порядок соответствует последовательности опроса флагов запросов прерываний, имеющей следующий вид: INT0 => TF0= > INT1 => TF1=> (RI,TI).

   ОБРАБОТКА ЗАПРОСОВ НА ПРЕРЫВАНИЯ

    Аппаратно-реализуемый вызов обработчика прерываний состоит включает в себя:
          — сохранение значения программного счетчика (PC) в стеке,
          — загрузку в программный счетчик начального адреса точки входа в соответствующий обработчик прерывания.
     Точки входа в обработчик прерывания для каждого источника прерываний аппаратно зафиксированы. По указанным адресам должны размещаться первые команды обработчиков прерываний.

Источник прерывания Адрес точки входа в обработчик прерывания
Внешнее прерывание (INT0) 03h
Прерывание от таймера/счетчика T/C0 08h
Внешнее прерывание (INT1) 13h
Прерывание от таймера/счетчика T/C1 18h
Прерывание от последовательного порта 23h

    При переходе на программу обработки прерывания автоматически независимо от состояния регистра IE запрещаются все прерывания с уровнем приоритета, равным уровню приоритета обслуживаемого прерывания, то есть вложенные прерывания с равным уровнем приоритета запрещены. Таким образом, низкоприоритетное прерывание (имеющее «0» в соответствующем разряде регистра IP) может прерываться высокоприоритетным (имеющим «1» в соответствующем разряде регистра IP), но не низкоприоритетным. Обслуживание высокоприоритетного прерывания не может быть прервано другим источником. Возврат из обработчика прерываний осуществляется с помощью команды RETI, которая восстанавливает из стека значение PC и логику приоритетов прерываний.

Приоритет — прерывание — Большая Энциклопедия Нефти и Газа, статья, страница 1

Приоритет — прерывание

Cтраница 1

Приоритеты прерываний назначаются следующим образом. Все множество сигналов прерывания разделяется на классы, каждый из которых соответствует одной причине прерывания.  [1]

Приоритет прерываний от ввода-вывода определяется типом канала и его адресом. Приоритет прерываний от ВУ в пределах — одного канала определяется причинами прерывания, порядком подключения ВУ к интерфейсу и порядком, в котором ВУ отвечает каналу при запросах на прерывание.  [2]

Схема приоритета прерываний совместно с РПП обеспечивает учет приоритетов по всем группам источников прерываний. В первую очередь выявляется наличие запроса на прерывание по контролю машины. Далее просмотр содержимого РЗП производится в порядке условных номеров приоритетов, начиная с программных прерываний. Это производится для того, чтобы при наличии нескольких запросов на различные прерывания в конечном итоге первой производилась обработка наиболее важных запросов, начиная с вводо-выводных прерываний, как это уже отмечалось выше. В регистре приоритетов прерываний имеется 5 разрядов — по одному на каждую группу запросов; это сделано вследствие того, что при обращении к супервизору для нового и старого ССП отводятся не те ячейки, что в случае программных прерываний.  [4]

Схема приоритетов прерываний может быть задана процессором программным путем. Но в принципе высший уровень приоритета задается для любого из входов запросов, можно также установить циклическое переключение приоритетов ( последний обслуженный запрос получает низший приоритет), обеспечивая тем самым всем запросам равные приоритеты. Если во время обработки прерывания с меньшим уровнем приоритета приходит более приоритетный запрос, то процессор переходит на программу обработки более приоритетного запроса, а после ее выполнения возвращается к программе обработки менее приоритетного запроса. Отметим, что немаскируемое прерывание NMI имеет приоритет выше любого другого аппаратного прерывания.  [5]

Используется структура гибкого приоритета прерываний. Уровень 0 — дамый низкий, а уровни 1 и 2 маскируются. Уровень 3 является высшим и не маскируется. Биты маски прерываний в регистре статуса ( SR) показывают текущий уровень приоритета прерываний в процессоре. Прерывания, имеющие уровень приоритета меньше текущего, не учитываются при арбитраже. Уровень приоритета 3 всегда вызывает прерывание процессора.  [7]

В большинстве компьютеров приоритеты прерываний упорядочены.  [8]

Отражают текущий уровень приоритета прерываний ( IPL) ядра. Прервать процесс работы ядра могут только немаскируемые прерывания или прерывания с IPL больше чем текущее значение маски прерывания. Текущий IPL ядра может меняться программно. В начале процедуры обслуживания прерывания ( ISR), SR ( включая биты маски прерываний) заносится в программный стек, биты маски прерываний меняются на IPL обслуживаемого прерывания. Биты сбрасываются во время сброса.  [9]

Почти все шифраторы приоритетов прерываний являются программируемыми. Посредством загрузки управляющего слова в регистр состояния модуля шифратора приоритетов осуществляется управление характеристиками и функциями модуля. Таким образом, характеристики и функции рассматриваемого устройства могут оперативно изменяться программным путем во время функционирования системы.  [11]

В многоуровневой системе прерываний приоритет прерывания определяет, может ли программа обработки прерывания одного уровня быть прервана запросом на прерывание другого уровня. Обычно в системах прерывания каждая линия прерывания имеет определенный приоритет.  [12]

В DSP56002 регистр уровней приоритета прерываний расширен: добавлены биты 16 — TIL1 и 17 — TIL0, которые задают уровень приоритета прерываний от таймера. Источники прерываний и их уровни приоритета указаны в табл. 2.9. Каждый источник прерываний имеет свой вектор для вызова процедуры обработки прерывания, расположенной в младших 64 словах памяти программ. При переходе к обработке исключений текущая инструкция выполняется, если только выбранное слово не является первым словом двухсловной инструкции, иначе выполнение инструкции прерывается.  [14]

Страницы:      1    2    3    4    5

Как расставлять приоритеты | КонсультантПлюс

Одна из заповедей тайм-менеджмента звучит так: «Успевать главное, а не всё!». Как научиться расставлять приоритеты, чтобы тратить бесценное время жизни на действительно важные вещи?

Один из самых простых и хорошо работающих подходов – матрица Эйзенхауэра. С ее помощью можно провести классификацию задач по критериям «Важность» и «Срочность» и выстроить приоритет выполнения задач.

Все стоящие перед вами задачи можно разместить в четырех квадратах матрицы Эйзенхауэра.

В первую очередь мы, разумеется, выполняем важные и срочные задачи из квадрата I. Ликвидация аварии или острая зубная боль, дела, которые нужно было выполнить «еще вчера», дела, которые тормозят выполнение других важных задач или командную работу. Обратите внимание! Если весь ваш день проходит в режиме аврала, когда вы заняты выполнением только срочных и важных задач, это верный путь к стрессу. И верный признак того, что вам необходим тайм-менеджмент, чтобы изменить ситуацию.

Срочные, но неважные дела из второго квадрата чаще всего поступают извне. Например, просьбы и поручения, исходящие от значимых для вас людей. Такие задачи тоже являются приоритетными, их нужно выполнить, как только появится возможность. Некоторые задачи только кажутся важными из-за своей срочности, например, частые прерывания для проверки почты. Если задача кажется вам совершенно не важной, навязанной, если кто-то пытается переложить на вас выполнение своих обязанностей, советуем вежливо, но твердо отказаться от выполнения такой задачи. Это сэкономит вам время и силы для выполнения несрочных, но важных лично для вас задач.

От выполнения большинства несрочных и неважных задач из третьего квадрата можно просто отказаться. Просматривая очередную серию бессмысленного сериала или часами выравнивая столбцы в таблице, подумайте о смысле жизни, о том, на что вы тратите бесценное и невосполнимое время!

В четвертом квадрате расположились важные, но несрочные задачи: регулярные спортивные тренировки, приобретение полезных для работы навыков, научная работа. На самом деле, это и есть наиболее приоритетные задачи. Их выполнение ведет вас к вашим стратегическим целям, способствует вашему росту. И именно на них вам чаще всего не хватает времени. Почему? Мешают задачи из других трех квадратов.

Как выделять время на важное, но несрочное

1. Планировать и бюджетировать. Мы уже писали о том, что в вашем ежедневном плане нужно зарезервировать бюджет времени на выполнение задач, ведущих вас к вашим стратегическим целям. Это время для развития и творчества. Выделяйте для таких задач самый плодотворный отрезок дня, старайтесь минимизировать прерывания. Если задача крупная (а мелких стратегических задач не бывает), разбейте ее на этапы, двигайтесь небольшими шагами. Но двигайтесь!

2. Боритесь с поглотителями времени, откажитесь от выполнения неважных и несрочных задач.

3. Ведите хронометраж. Фиксируйте время, которое вы посвятили выполнению важных несрочных задач. Мы уже рассказывали, как работает этот метод.

Ваша цель в работе со стратегическими задачами состоит в том, чтобы не допускать перехода важных, но несрочных задач в важные и срочные. От спешки страдаете и вы сами, и качество выполнения задач. А это не входит в ваши планы, не правда ли?

По материалам книг Г. Архангельского

Что такое прерывания, приоритетные прерывания и приоритет последовательного подключения

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

Основная задача системы прерывания — определить источник прерывания.Также существует вероятность, что несколько устройств будут одновременно запрашивать связь с ЦП. Затем система прерывания должна решить, какое устройство обслуживать в первую очередь.


Приоритетное прерывание

Приоритетное прерывание — это система, которая определяет приоритет, с которым различные устройства, генерирующие сигнал прерывания одновременно, будут обслуживаться ЦП. Система имеет право решать, при каких условиях можно прерывать ЦП, пока обслуживается какое-то другое прерывание.Обычно устройствам с высокой скоростью передачи данных, таким как магнитные диски , дается высокий приоритет, а медленным устройствам, таким как клавиатуры , назначается низкий приоритет.

Когда два или более устройства прерывают работу компьютера одновременно, компьютер в первую очередь обслуживает устройство с более высоким приоритетом.


Типы прерываний:

Ниже приведены несколько различных типов прерываний:


Аппаратные прерывания

Когда сигнал для процессора исходит от внешнего устройства или оборудования, это прерывание известно как аппаратное прерывание .

Давайте рассмотрим пример: когда мы нажимаем любую клавишу на нашей клавиатуре, чтобы выполнить какое-либо действие, то это нажатие клавиши генерирует сигнал прерывания для процессора, чтобы выполнить определенное действие. Такое прерывание может быть двух типов:

  • Маскируемое прерывание
  • Аппаратные прерывания, которые могут быть отложены, если одновременно произошло прерывание с высоким приоритетом.

  • Немаскируемое прерывание
  • Аппаратные прерывания, которые не могут быть отложены и должны немедленно обрабатываться процессором.


Программные прерывания

Прерывание, вызванное любой внутренней системой компьютерной системы, называется программным прерыванием . Также может быть двух видов:

  • Нормальное прерывание
  • Прерывания, вызванные программными инструкциями, называются обычными программными прерываниями .

  • Исключение
  • Незапланированные прерывания, которые возникают во время выполнения некоторой программы, называются исключениями , например делением на ноль.


Приоритет последовательного подключения

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

В системе гирляндного подключения все устройства подключаются последовательно. Запрос линии прерывания является общим для всех устройств.Если какое-либо устройство имеет сигнал прерывания в состоянии низкого уровня, линия прерывания переходит в состояние низкого уровня и разрешает ввод прерывания в CPU. Когда нет прерывания, линия прерывания остается в состоянии высокого уровня. CPU реагирует на прерывание, разрешая строку подтверждения прерывания. Этот сигнал принимается устройством 1 на его входе PI. Сигнал подтверждения передается следующему устройству через выход PO, только если устройство 1 не запрашивает прерывание.

На следующем рисунке показана блок-схема системы приоритетов гирляндного подключения.



Обработка исключений, Руководство разработчика программного обеспечения Nios II

% PDF-1.3 % 1 0 объект > эндобдж 2 0 obj / Фильтр /Adobe.PPKLite / M (D: 20110506160303-07’00 ‘) / Имя (Продукт Acrobat v8.0 P23 0002337) / Prop_Build > /Фильтр > / PubSec >>> /Справка [> / Тип / SigRef >>] / Подфильтр /adbe. pkcs7.detached / Тип / Sig >>>> / Threads 10 0 R / Type / Catalog / ViewerPreferences >>> эндобдж 3 0 obj > эндобдж 4 0 объект > поток FrameMaker 9.02011-05-06T16: 03: 03-07: 002010-04-08T10: 22: 46Z2011-05-06T16: 03: 03-07: 00 (c) 2011, Altera Corporation. Все права защищены. Acrobat Distiller 9.4.2 (Windows) Nios II Обработка исключений, Аппаратные прерывания, Исключения, связанные с инструкциями, Уровень аппаратной абстракции (HAL), Программа обслуживания прерываний (ISR), Обработчик исключений, Воронка прерывания, Обработчик прерывания, Производительность прерывания , Nios II Software Developer’s Handbookapplication / pdf

  • Exception Handling, Nios II Software Developer’s Handbook
  • Altera Corporation
  • Как написать программное обеспечение для обработки исключений в архитектуре процессора Nios II
  • (c) 2011 г., Altera Corporation.Все права защищены. Uuid: b7613e21-8a04-4c96-a28d-aca2a8ae643cuuid: 7205ca79-77ce-4e95-9de3-b75cdda7ec51 конечный поток эндобдж 5 0 obj > эндобдж 6 0 obj > эндобдж 7 0 объект > эндобдж 8 0 объект > эндобдж 9 0 объект > эндобдж 10 0 obj [11 0 R] эндобдж 11 0 объект

    Обработчик прерываний — обзор

    11.1.2 Настройка таблицы векторов

    Для простых приложений с фиксированными обработчиками прерываний таблица векторов может быть закодирована во Flash или ROM. В этом случае нет необходимости настраивать таблицу векторов во время выполнения. Однако в некоторых приложениях необходимо изменять обработчики прерываний для разных ситуаций. Затем вам нужно будет переместить векторную таблицу в доступную для записи память.

    Перед перемещением таблицы векторов может потребоваться скопировать содержимое существующей таблицы векторов в новое место таблицы векторов.Сюда входят векторные адреса для обработчиков ошибок, немаскируемые прерывания (NMI), системные вызовы и т. Д. В противном случае процессор будет извлекать недопустимые адреса векторов, если эти исключения имеют место после перемещения таблицы векторов.

    После того, как необходимые элементы таблицы векторов настроены и таблица векторов перемещена, мы можем добавлять новые векторы в таблицу векторов. Для пользователей библиотек драйверов, совместимых со стандартом программного интерфейса микроконтроллеров Cortex (CMSIS), регистр смещения таблицы векторов может быть доступен через « SCB-> VTOR » в определении основного периферийного устройства.

    void SetVector (unsigned int ExcpType, unsigned int VectorAddress)

    {// Расчет местоположения вектора = VTOR + (Exception_Type * 4)

    * ((volatile unsigned int *) (SCB-> VTOR + (ExcpType << 2 ))) = VectorAddress | 0x1;

    // LSB вектора установлен в 1, чтобы указать Thumb

    return;

    }

    Для пользователей, предпочитающих программирование на ассемблере, это можно сделать с помощью следующего примера кода:

    ; Подпрограмма для установки вектора исключения на основе

    ; тип исключения

    ; (Для IRQ добавьте 16: IRQ # 0 = тип исключения 16)

    SetVector

    ; Вход R0 = тип исключения

    ; Вход R1 = значение адреса вектора

    PUSH {R2, LR}

    LDR R2, = 0xE000ED08; Регистр смещения таблицы векторов

    LDR R2, [R2]

    ORR R1, R1, # 1; Установите LSB вектора, чтобы указать Thumb

    STR R1, [R2, R0, LSL # 2]; Записать вектор в VectTblOffset +

    ; ExcpType * 4

    POP {R2, PC}; Возврат

    Установка младшего значащего бита (LSB) в 1 в векторе не требуется в большинстве случаев, поскольку компилятор или ассемблер должен распознать адрес как адрес инструкции Thumb ® и установить его автоматически.

    Как настроить приоритеты запросов прерывания (IRQ) в Windows

    Большинство компонентов, непосредственно подключенных к вашей материнской плате, включая слоты PCI, контроллеры IDE, последовательные порты, порт клавиатуры и даже CMOS вашей материнской платы, имеют индивидуальные запросы прерывания (IRQ) присвоено им.

    Линия запроса прерывания или IRQ — это пронумерованная линия аппаратного обеспечения, по которой устройство может прервать нормальный поток данных к процессору, позволяя устройству функционировать.

    Windows Vista и 7 позволяют назначать приоритет одному или нескольким IRQ (которые преобразуются в одно или несколько аппаратных устройств), потенциально улучшая производительность этих устройств.Ниже приведены основные советы по редактированию реестра, которые можно использовать для установки приоритетов IRQ.

    1. Начните с открытия служебной программы «Сведения о системе» (msinfo32.exe) и перейдите в раздел «Сводка системы» \ «Ресурсы оборудования» \ IRQs, чтобы просмотреть IRQ, используемые в вашей системе, и устройства, которые их используют.

    Обратите внимание на IRQ13 (процессор числовых данных), который мы будем использовать в этом примере:


    2. Затем откройте редактор реестра и перейдите к следующему разделу. Если PriorityControl не существует, создайте ключ в разделе Control.

     HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ PriorityControl 


    3. Создайте новое значение DWORD в этом ключе и назовите его IRQ # Priority, где # — это IRQ устройства, которому вы хотите назначить приоритет (например, IRQ13Priority для IRQ 13, который является вашим числовым процессором).


    4. Дважды щелкните новое значение и введите номер его приоритета. Введите 1 для наивысшего приоритета, 2 для секунды и так далее. Убедитесь, что не вводите один и тот же номер приоритета для двух записей, и сохраните простоту, сначала поэкспериментируя только с одним или двумя значениями.


    5. Закройте редактор реестра и перезагрузите компьютер, когда закончите.

    Некоторые пользователи добились хороших результатов, установив приоритет IRQ 8 (для системной CMOS) и IRQ, соответствующий видеокарте, но обратная связь не подтверждена. Как вы думаете, это настройка плацебо? Оставляйте свои комментарии!

    Организация и архитектура компьютера: прерывание с приоритетом COA

    В типичном приложении к компьютеру подключено несколько устройств ввода-вывода, при этом каждое устройство может инициировать запрос прерывания, чтобы предоставлять услуги устройству, которое инициирует запрос прерывания , задача системы прерываний — идентифицировать источник (устройство) прерывания и затем предоставлять им услуги.

    Но в большинстве случаев существует вероятность того, что несколько источников запросят обслуживание одновременно. Таким образом, в этом случае система прерывания также должна решить, какое устройство обслуживать первым. Но эта простая система прерывания не может для этого предусмотрена другая система, известная как система прерывания приоритета.

    Приоритетное прерывание — это система, которая устанавливает приоритет по отношению к различным источникам (устройствам прерывания), чтобы определить, какое условие должно быть обработано в первую очередь при одновременном поступлении двух или более запросов.Эта система также может определять, при каких условиях разрешено прерывание компьютера во время обслуживания другого прерывания.

    Обычно в приоритетных системах в первую очередь обслуживаются уровни прерывания с более высоким приоритетом, так как если они задерживаются или прерываются, это может иметь серьезные последствия. А устройствам с высокоскоростной передачей данных, таким как магнитные диски, предоставляется высокий приоритет, и медленные устройства, такие как клавиатуры, получают низкий приоритет.

    Установка приоритета одновременного прерывания:

    Приоритет одновременных прерываний может быть установлен программным или аппаратным способом.

    Программный метод, который дает приоритет одновременному прерыванию:

    А аппаратный метод, который дает приоритет одновременному прерыванию:

    Теперь мы рассмотрим каждое из них по очереди.


    1. Опрос:


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

    Опрос может быть в форме отдельной командной строки (например, Test I / O). В этом случае процессор поднимает Test I / O и помещает адрес конкретного модуля I / O в адресную строку. Если в нем есть прерывание, то есть если в нем обнаружено прерывание.

    И именно порядок, в котором они проверяются, то есть порядок, в котором они появляются в адресной строке (процедура обслуживания), определяет приоритет каждого прерывания.Как и при тестировании, сначала тестируются источники (устройства) с наивысшим приоритетом, а затем устройства с более низким приоритетом.

    Это очень простой метод установки приоритета при одновременном прерывании, но недостатком опроса является то, что он занимает очень много времени.


    2. Приоритет последовательного подключения:


    Метод последовательного подключения для установления приоритета источников прерываний использует аппаратные средства, то есть это аппаратные средства установления приоритета.


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

    На рисунке ниже показан способ подключения трех устройств и ЦП.

    Он работает следующим образом:

    Когда какое-либо устройство вызывает прерывание, активируется линия запроса прерывания, процессор, обнаружив это, отправляет подтверждение прерывания, которое сначала принимается устройством1.

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *