2009-05-20 3 views
4

Хорошо, в школе мы разрабатываем операционную систему. Мой проект заключался в разработке драйвера жесткого диска ATA. Я думал, что у меня была обычная процедура прерывания работы, когда мой профессор указал, что я только отправляю команды прерывания прерывания для подчиненного ПОС, а не для мастера.Почему прерывание прерывания для главного PIC вызывает тройную ошибку (перезагрузка)?

Моя проблема заключается в том, что всякий раз, когда я посылаю конец прерывания мастеру PIC, он вызывает тройную ошибку, которая затем заставляет мою систему перезагружаться. Теперь у меня есть un/прокомментировал кучу строк, и кажется, что всякий раз, когда функция отправки конца прерывания на главный PIC остается в коде, я получаю тройную ошибку.

Теперь я совершенно уверен в следующем:

  1. прерывания отключены при входе в мой ISR
  2. Я правильно посылая конца-прерывание байт (класс тестировался)
  3. Я не повторное подтверждение одного и того же прерывания

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

Спасибо!

+2

Старая почта, но, возможно, автор все еще жив? Как насчет кода? – Earlz

ответ

0

Я могу только догадываться. Вот некоторые вещи для проверки.

  • Является ли EOI вне пределов вашего сегмента?
  • Является ли EOI на странице только для чтения?
  • Является ли ваш обработчик прерываний на правильном уровне привилегий для доступа к EOI?
  • Вы используете правильный регистр сегментов?

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

Смежные вопросы