Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Приоритет аппаратных прерываний  (Прочитано 10445 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Tuborg
Модератор

ee
Offline Offline

« : 06-01-2004 12:35 » 

Привет всем!
Я понимаю, что про программирование контроллера 8259 написано куча всего, но находятся такие люди как я которым не всё до конца ясно. Глубокоуважаемые гуру, поясните пожалуйста (желательно на примере) как сменить приооритет прерывания в моём случае:
Имеются в проге необходимость в 10ти источниках прерывания:
IRQ   0 -- INT 8 -- приор. 0
IRQ   1 -- Keyb -- приор. 15
IRQ   8 -- RTC -- приор. 13
IRQ 10 -- Ext1 -- приор. 11
IRQ 11 -- Ext2 -- приор. 10
IRQ 14 -- HDD -- приор. 7
IRQ 3 -- COM2 -- приор. 5
IRQ 4 -- COM1 -- приор. 4
IRQ 5 -- Ext3 -- приор. 3

Хочется источник Ext3 иметь приоритетом выше всех остальных, кроме таймера (int 8), если согласно документации сделать циклический сдвиг приоритетов, то Ext3 станет приоритетнее int 8, что допускать нельзя. Ещё есть выход - режим автоматического завершения прерывания - может ли оно мне помочь, поскольку повторную входимость я могу алгоритмически обеспечить лишь 3-4 обработчикам, не перегружать же их все...
    Есть у кого нибудь опыт в подобной ситуёвине или предложение?
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 07-01-2004 10:34 » 

Если не ошибаюсь, то установка приоритета в пределах одного apic - это простая ротация (изначально приоритет направлен от irq0 (больший) к irq7 (меньший)). Во втором apic собственная система приоритетов (аналогичная), но следует учитывать что при каскадировании использовалось irq4.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Tuborg
Модератор

ee
Offline Offline

« Ответ #2 : 07-01-2004 12:26 » 

 Вот такой я вот Везде в документации указывается примерно следущее:
------------------------------------------------------------------------------------------
   .... Высший приоритет получает линия IRQ0, низший  - IRQ7, линии со второго ПКП IRQ8-IRQ15 получают при этом приоритеты в промежутке между IRQ1 и IRQ3, из них более приоритетен вход IRQ8 с аналогичным уменьшением приоритета в сторону увеличения номера входа.
-----------------------------------------------------------------------------------------
   таким образом получим следующую таблицу:

 pic1    pic2    priority    purpose
----------------------------------------
IRQ 0...............0............INT 8
IRQ 1...............1............Keyb
IRQ 2..IRQ8......2............RTC
..........IRQ9......3
..........IRQ10....4............Ext1
..........IRQ11....5............Ext2
..........IRQ12....6
..........IRQ13....7
..........IRQ14....8............HDD
..........IRQ15....9
IRQ 3..............10...........COM2
IRQ 4..............11...........COM1
IRQ 5..............12...........Ext3
IRQ 6..............13
IRQ 7..............14

 Меня интересует повысить приоритет устройства обозначенного как Ext3 выше HDD и ниже INT8. Если производить ротацию на втором pic'е то положение Ext3 не изменится, если производить ротацию на первом pic'е, то мы сможем Ext3 поставить приоритетом выше INT 8 (на перегруженном INT8 происходят арифметические действия каждые 10 мкс, введение погрешности путём уменьшения приоритета не желательно).
   На Ext3 (ISA устройство) есть перемычка переключения IRQ: IRQ5, IRQ6, IRQ7, если бы там ещё было и IRQ 9, то проблема решалась бы простой перемычкой - а так никак....  Жаль
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 07-01-2004 16:20 » 

Немного ошибся - каскад стоит на irq2 - бывает... :oops:

Прерывание на FPU происходит при ошибках вычисления:
1) запрещенная операция;
2) денормализованный операнд;
3) деление на 0;
4) переполнение;
5) антипереполнение;
6) потеря точности.
В иных случаях прерывание не генерится.
Кроме того, исключения, которыми можно пренебречь, можно маскировать через регистр управления FPU. Напр., "потеря точности" в большенстве случаев не нужно, а остальные исключения происходят реже.

У тебя такая древняя машина, что приоритеты прерываний важны?
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Tuborg
Модератор

ee
Offline Offline

« Ответ #4 : 07-01-2004 17:09 » 

1. Причём тут FPU Не понял?? :?
2. Не машина древняя, а математика к погрешностям порядка больше 10 мкс очень чувствительная
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #5 : 08-01-2004 08:11 » 

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

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

Попробуй поискать описание чипсетов на интеловском сайте - может современные контроллеры умеют больше чем 8259.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines