KA3AKOB
Пользователь
Сообщений: 55
|
 |
« : 23 Август, 2019, 14:44:30 » |
|
При написании драйвера (resource manager'а) возникает вопрос: "В какую из стандартных точек входа помещать команду на разрешение прерывания?". На первый взгляд самое место поместить команду out8(ba+0xD, IRQnum) в обработчик io_open. Логично было бы располагать разрешение на прерывание в io_open, а запрет прерывания в io_close.Но здесь ждут подводные камни: вызов в клиентской программе POSIX-функции stat() выливается в посылку сообщений и вызовы io_open, io_stat, io_close в драйвере. Но так было бы логично, если бы io_open вызывался бы только open(), а io_close, только close(). Но это не так, см. stat(). Тогда куда помещать разрешение на прерывание, а куда на запрет? Разрешение непосредственно в начале io_write, а запрещение в конце io_write? Такое решение тоже не очень надёжно, потому, что подряд две команды out8(ba+0x0D, IRQnum); // разрешение на прерывание out8(ba+0, buf[0]); |// вывод байта, отработав который, электронная схема периферийного устройства возбудит прерывание в центральном процессоре Но при таком подходе, по первой команде электроника может не успеть ещё отработать, как процессор уже прислал новую (вторую) команду. Так куда всё же помещать разрешение на прерывание в драйвере? С уважением, Казаков С.А.
|