> man operating_systems
Переход на страницу  1 [2]
Модераторы: Roman I Khimov, Wanderer, Dron
Автор Добавил
Димон
Вторник 28.08.2007 18:58
ID пользователя #761
Зарегистрирован: Пятница 10.11.2006 21:29
Сообщений: 27
Я добавил новую функцию сброса прерываний

void reset_interrupts()
{
irq_mask = inportb(0x21);
irq_mask &= ~IRQ_MASK_KEYBOARD;
outportb(0x21, irq_mask);
}

Добавил её в обработчик нажатия клавиш

//А если нажата...
if(shift)
{
//Если шифт нажат, но преобразовать скан-код в "шифтнутое" ASCII
ascii = scancodes_shifted[scancode];
reset_interrupts();
}
else
{
//А если не нажат - то в обычное
ascii = scancodes[scancode];
reset_interrupts();
}

Правильно? А HLT оставил после putchar(ascii).
Система у меня начинает перезагружаться сразу после передачи управления ядру, которое и вызывает функцию Readkey.
(Для тестов системы использую VMware Workstation 5.5.2)
Alman, можешь обьяснить где именно вызывать эту функцию(со "сбрасываниями" прерываний встречаюсь впервые).
Наверх
alman
Вторник 28.08.2007 19:47

ID пользователя #753
Зарегистрирован: Суббота 28.10.2006 01:21
Местонахождение: планета Земля
Сообщений: 95
Упс. Кажется я форшманулся.
Контроллеру прерываний после каждого прерывания надо подать команду конца прерывания:

outportb(0x20, 0x20);

Наверх
Сайт
alman
Вторник 28.08.2007 22:26

ID пользователя #753
Зарегистрирован: Суббота 28.10.2006 01:21
Местонахождение: планета Земля
Сообщений: 95
http://www.board.sysbin.com/viewtopic.php?t=381

По этой ссылке про клавиатуру хорошо написано.

Только учти, ты читаешь клавиатуру не в обработчике прерывания, а из основного потока. При таком подходе тебе будет трудно написать хотя бы драйвер мышки, не говоря об остальном.
Наверх
Сайт
Димон
Среда 29.08.2007 12:01
ID пользователя #761
Зарегистрирован: Пятница 10.11.2006 21:29
Сообщений: 27
Как понять из основного потока?
Наверх
alman
Четверг 30.08.2007 04:40

ID пользователя #753
Зарегистрирован: Суббота 28.10.2006 01:21
Местонахождение: планета Земля
Сообщений: 95
Димон написал(а) ...

Как понять из основного потока?


Основной, он же единственный. Т.е. это контекст процессора, в котором исполняется программа.

Например, Windows представляет функцию CreateThread, которая позволяет распараллелить выполнение задачи. Все современные Юниксы предоставляют аналогичную функцию - pthread_create.
Наверх
Сайт
Переход на страницу  1 [2]  

Перейти:     Наверх

Транслировать сообщения этой темы: rss 0.92 Транслировать сообщения этой темы: rss 2.0 Транслировать сообщения этой темы: RDF
Powered by e107 Forum System

© OSRC.info, 2004-2010.
Авторские права на любые материалы, авторы которых явно указаны, принадлежат их авторам. По вопросам публикации таких материалов обращайтесь к авторам.
Авторские права на любые другие материалы принадлежат OSRC.info.
Сайт является помещением библиотеки. Копирование, сохранение на жестком диске или иной способ сохранения произведений осуществляются пользователями на свой риск.
При использовании материалов сайта ссылка на OSRC.info обязательна.