OSDev http://osdev.su/ |
|
как быть с клавой? http://osdev.su/viewtopic.php?f=6&t=836 |
Страница 1 из 1 |
Автор: | Мотороллер [ 04 дек 2013, 11:27 ] |
Заголовок сообщения: | как быть с клавой? |
есть обработчик клавиатуры. нажатые клавиши он пока выводит на экран для видимости своей работы, сейчас в его работе сомнений нету, поэтому хотелось бы сделать что-то типа буфера клавиатуры. только вот что и как - хз. есть идея сделать небольшой аналог досового кольцевого буфера, но тут возникает проблема с использованием его в многозадачности. можно конечно в каждой задаче сделать свой буфер, но это край. может есть что-то лучше этого? |
Автор: | sh2ezo [ 04 дек 2013, 12:52 ] |
Заголовок сообщения: | Re: как быть с клавой? |
Пусть каждая задача, использующая клаву, сообщает об этом драйверу клавы, а драйвер клавы пусть шлёт сообщения о нажатиях и отпусканиях всем нуждающимся. Так количество запоминаемых клавиш не будет ограничиваться размером клавиатурного буфера. |
Автор: | Мотороллер [ 04 дек 2013, 13:20 ] |
Заголовок сообщения: | Re: как быть с клавой? |
у меня сейчас "драйвер" клавиатуры - это обработчик прерывания в ядре. не гоже будет ему всю эту рутину выполнять. тогда можно, наверное, так сделать: в обработчик прерывания клавиатуры (который в ядре) засунуть код, который только будет принимать скан-коды клавишь, сам драйвер вынести в отдельный модуль, который будет работать на уровне ядра, но выполняться как процесс. т.е. примерно так: Код: keyboard_handler:
in al, 60h mov [keyboard_driver_kye_scancode], al in al, 61h mov ah, al or al, 80h out 61h, al mov al, ah out 61h, al iretd keyboard_driver: cmp [keyboard_driver_kye_scancode], 0 je keyboard_driver ;тут преобразование сканкода в аски код и посыл его всем процессам mov [keyboard_driver_kye_scancode], 0 jmp keyboard_driver |
Автор: | sh2ezo [ 04 дек 2013, 13:55 ] |
Заголовок сообщения: | Re: как быть с клавой? |
ИМХО, при такой организации велик риск того, что клава пошлёт несколько кодов, а "драйвер" не успеет все обработать. Если не отказываться от архитектуры с кучей сообщений, то нужен буфер между "драйвером" и обработчиком. А вообще тут на форуме учебная ОС есть и оттуда можно взять схему работы с клавой |
Автор: | Мотороллер [ 04 дек 2013, 14:37 ] |
Заголовок сообщения: | Re: как быть с клавой? |
я просто думал, что пользователь не может нажимать так быстро клавиши. + у меня ось будет пока что в обычном консольном режиме, можно слать проге сообщение о том, что пользователь сменил консоль, та в свою очередь отправит драйверу сообщение о снятие запроса на клаву. можно сделать так! |
Автор: | scuter [ 04 дек 2013, 23:01 ] |
Заголовок сообщения: | Re: как быть с клавой? |
делай один буфер, пейджингом подставляй. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |