Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обработка прерываний 
:(
    Опции темы
kolesnle
Дата 18.7.2013, 10:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Упертый сишник
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 22.3.2013

Репутация: нет
Всего: нет



Пишу свою игрушечную ОС smile Столкнулся с проблемой обработки прерываний(глупый я, глупый)
Обработчик пишу так:
Код

#define __interreput_handler(name) \
    void handle_##name##_int()
#define __interreput_begin \
    __asm__("pushal")
#define __interreput_end \
    __asm__("popal; leave; iret")
__interreput_handler(INT_NUM)
{
    __interreput_begin;
    //....
   __interreput_end;
}

Как мне сделать так, чтобы по срабатыванию прерывания INT_NUM вызывался мой обработчик?
PM MAIL   Вверх
volatile
Дата 18.7.2013, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 37
Всего: 85



Если это x86 архитектура, а судя по мнемоникам это она и есть,
то нужно в таблицу прерываний (адрес таблицы прерываний находицца в регистре IDTR), по смещению соответствующему  номеру вашего прерывания, поместить адрес вашей процедуры обработчика.
Это кстати в реальном режиме.

В защищенном туда кроме адреса, нужно поместить права доступа, и кое-что еще...
smile 

Подробнее здесь: Interrupt descriptor table

PM MAIL   Вверх
kolesnle
Дата 18.7.2013, 12:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Упертый сишник
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 22.3.2013

Репутация: нет
Всего: нет



Цитата(volatile @  18.7.2013,  12:32 Найти цитируемый пост)
Если это x86 архитектура, а судя по мнемоникам это она и есть,
то нужно в таблицу прерываний (адрес таблицы прерываний находицца в регистре IDTR), по смещению соответствующему  номеру вашего прерывания, поместить адрес вашей процедуры обработчика.
Это кстати в реальном режиме.

В защищенном туда кроме адреса, нужно поместить права доступа, и кое-что еще...
 

Подробнее здесь: Interrupt descriptor table

Огроменное спасибо! Еще появится вопросы тут напишу smile
PM MAIL   Вверх
kolesnle
Дата 18.7.2013, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Упертый сишник
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 22.3.2013

Репутация: нет
Всего: нет



Цитата(volatile @  18.7.2013,  12:32 Найти цитируемый пост)
В защищенном туда кроме адреса, нужно поместить права доступа

А как записываются права доступа? Что нужно записать в эти биты 40-47?
PM MAIL   Вверх
volatile
Дата 18.7.2013, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 37
Всего: 85



kolesnle, Вот здесь довольно доходчиво, по русски, объясняецца что такое дескрипторы, и что нужно писать в таблицу прерываний в защиценном режиме.

Если вам нужна какаято более полная инфа, то на интел.ком - есть все доки.
Кстати очень хорошие доки. = четкие и конкретные, без вывертов, какие любят делать некоторые стандартописатели. не будем указывать пальцем  smile 


доки от интел

Это сообщение отредактировал(а) volatile - 18.7.2013, 16:36
PM MAIL   Вверх
kolesnle
Дата 18.7.2013, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Упертый сишник
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 22.3.2013

Репутация: нет
Всего: нет



Цитата(volatile @  18.7.2013,  16:30 Найти цитируемый пост)
kolesnle, Вот здесь довольно доходчиво, по русски, объясняецца что такое дескрипторы, и что нужно писать в таблицу прерываний в защиценном режиме.

Если вам нужна какаято более полная инфа, то на интел.ком - есть все доки.
Кстати очень хорошие доки. = четкие и конкретные, без вывертов, какие любят делать некоторые стандартописатели. не будем указывать пальцем   


доки от интел

Спасибо огромное!!!
PM MAIL   Вверх
akizelokro
Дата 23.7.2013, 19:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Крокодил
**


Профиль
Группа: Участник
Сообщений: 761
Регистрация: 30.7.2007

Репутация: 1
Всего: 5



http://rus-linux.net/MyLDP/kernel/toyos/so...like-os-04.html

вроде хороший примерчик

Этот ответ добавлен с нового Винграда - http://vingrad.com
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1204 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.