Обработчик прерываний работает только один раз - PullRequest
0 голосов
/ 09 февраля 2020

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

Редактировать:

Я использую тот же код, что и в ссылке ниже. (Пример кода)

IRQ клавиатуры в ядре x86

РЕДАКТИРОВАТЬ: Эта топика c может быть закрыта, проблема решена. Мне нужно было только читать код порта, а не действовать в соответствии с портом состояния.

1 Ответ

0 голосов
/ 10 февраля 2020

Почти наверняка это:

 status = read_port(0x64);
 /* Lowest bit of status will be set if buffer is not empty */
 if (status & 0x01) {

должно быть ~ это:

 while ((status = read_port(0x64)) & 1) {
 /* Lowest bit of status will be set if buffer is not empty */

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

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