Официальный форум СВД Встраиваемые Системы
12 Июль, 2025, 11:17:26 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти
 
 
 Сайт СВД ВС  Начало   Помощь Поиск Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: В какое место драйвера надёжнее всего помещать разрешение прерывания?  (Прочитано 1017 раз)
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]);       |// вывод байта, отработав который, электронная схема периферийного устройства возбудит прерывание в центральном процессоре
Но при таком подходе, по первой команде электроника может не успеть ещё отработать, как процессор уже прислал новую (вторую) команду.
Так куда всё же помещать разрешение на прерывание в драйвере?
С уважением,
Казаков С.А.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP © 2002-2024 СВД Встраиваемые Системы.
При использовании материалов сайта ссылка на forum.kpda.ru обязательна.

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines | © Aiwan. Kolobok smiles | Sitemap
Valid XHTML 1.0! Valid CSS!
Сайт СВД ВС

В последний раз google посещал эту страницу 18 Март, 2020, 19:12:50