Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
8 / 8 / 5
Регистрация: 28.03.2014
Сообщений: 137
1

Прерывания в ОСи: прототип функции-обработчика

01.10.2015, 21:04. Показов 1371. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Как реализовать прерывания на C++. Какой должен быть прототип функции-обработчика. Как делать выход из обработчика. Mожет callback надо делать? Я сделал так:
C++
1
2
3
4
5
6
void* handler()
{
__asm__ __volatile__("pushad");
printf("!!!");
__asm__ __volatile__("popad; leave; iret);
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.10.2015, 21:04
Ответы с готовыми решениями:

Выход из цикла в функции обработчика прерывания
Здравствуйте. Понадобилась программа работающая по прерыванию, а именно по приему данных через...

Возврат из обработчика прерывания.
Продублирую вопрос сюда, ибо в "Мелких вопросах" висит он неприкаянно: Как осуществить возврат...

Выход из обработчика прерывания
Есть обработчик прерывания, который проверяет состояние кнопки и в зависимости от состояния кнопки...

Выход из обработчика прерывания
Задача: По прерыванию (нажатие кнопки) нужно покинуть рабочий цикл и передать управление некой...

6
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16344 / 7662 / 1076
Регистрация: 11.11.2010
Сообщений: 13,712
02.10.2015, 04:02 2
Вадик_,
чтобы iret нормально отработал в стек нужно занести три параметра
текущее содержимое регистра флагов EFLAG (команда pushf)
текущее содержимое регистра CS (команда push cs)
и адрес возврата из прерывания (push адрес_возврата)
но под Windows система не даст вызвать прерывание пользователя, только под "чистым" DOS или, на худой конец, в режиме эмуляции DOS
0
8 / 8 / 5
Регистрация: 28.03.2014
Сообщений: 137
02.10.2015, 10:02  [ТС] 3
Я ось свою пишу, а не программирую под windows. Мне надо прототип обработчика.
0
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16344 / 7662 / 1076
Регистрация: 11.11.2010
Сообщений: 13,712
02.10.2015, 10:25 4
C
1
2
3
__asm__ __volatile__("pushf","push cs","push return_addr");
printf("!!!");
__asm__ __volatile__("iret");
0
1377 / 521 / 72
Регистрация: 21.07.2015
Сообщений: 1,304
02.10.2015, 10:45 5
Обработчик не получится написать на ЯВУ. Но можно написать обертку на асме и уже внутри вызывать сишную функцию. Для этого можно даже макрос сделать. В обертке обязательно перед вызовов с-функции сохранять все регистры общего назначения, после-восстанавливать. Все остальные варианты приведут к переполнению стека из-за несовместимости со стековым кадром.
0
8 / 8 / 5
Регистрация: 28.03.2014
Сообщений: 137
02.10.2015, 14:59  [ТС] 6
Код можно?
0
 Аватар для Kastaneda
5232 / 3204 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
21.10.2015, 23:34 7
Цитата Сообщение от Вадик_ Посмотреть сообщение
Мне надо прототип обработчика.
На сколько я помню там есть необязательный параметр - код ошибки. Т.е. нужно делать ф-цию с переменным кол-вом аргументов
C++
1
2
void handler(...); // если С++, либо
void handler(); // если С
ну и вытягивать уже нужные аргументы при помощи <stdarg.h>

Добавлено через 3 минуты
Там же на каждое исключение можно свой обработчик повешать, вся процедура заключяется в указании адреса обработчика. Внутри обработчика уже решать что тебе нужно со стека снять (вернее что там лежит в зависимости от номера прерывания)
1
21.10.2015, 23:34
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.10.2015, 23:34
Помогаю со студенческими работами здесь

Выгрузка резидента из обработчика прерывания
Здравствуйте! Вопрос такой: Как в программе выгрузить из памяти резидент , в конце обработчика...

Сброс обработчика прерывания из более приоритетного прер-я
Здравствуйте спецы! Столкнулся с задачей, с которой ранее дел не имел и даже не интересовался. ...

Не работает эмуляция обработчика прерывания Print Screne
Задание такое - эмуляция обработчика прерывания Print Screen (INT 5) c выводом копии экрана в файл\...

Задержки на SysTick внутри обработчика прерывания, дребезг
Доброго времени суток. 1. Пытаюсь прикрутить delay на SysTick. При вызове из main все работает...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Элементы алгоритмизации
hw_wired 28.01.2025
Основы алгоритмизации В современном мире алгоритмы играют фундаментальную роль в развитии информационных технологий и программирования. Понимание основ алгоритмизации является ключевым элементом в. . .
Человек и информация
hw_wired 28.01.2025
Введение: роль информации в познании мира В современном мире информация играет фундаментальную роль в процессе познания окружающей действительности. Она представляет собой совокупность сведений об. . .
Компьютер и информация
hw_wired 28.01.2025
Эволюция вычислительных машин История развития вычислительной техники начинается задолго до появления первых электронных устройств. Человечество всегда стремилось упростить процесс вычислений и. . .
Информационные технологии
hw_wired 28.01.2025
Введение в современные технологии работы с информацией В современном мире информационные технологии стали неотъемлемой частью практически всех сфер человеческой деятельности. Они существенно. . .
Информация вокруг нас
hw_wired 28.01.2025
Основные понятия информации В современном мире понятие информации является фундаментальным и охватывает практически все сферы человеческой деятельности. Информация представляет собой совокупность. . .
Компьютер для начинающих
hw_wired 28.01.2025
Введение в мир компьютерных технологий В современном мире информация стала одним из важнейших ресурсов человечества, определяющим развитие общества и технологий. Наша жизнь неразрывно связана с. . .
[golang] 189. Rotate Array
alhaos 28.01.2025
Повороты рукоятки, целочисленный слайс нужно сдвинуть на целое положительное число. Мне очень нравится решение на GO / / https:/ / leetcode. com/ studyplan/ top-interview-150/ package topInterview . . .
КуМир: решение задач на матрицы
bytestream 28.01.2025
КуМир представляет собой среду для обучения программированию, которая включает в себя мощные инструменты для работы с матрицами. Матрица в программировании - это двумерный массив, состоящий из. . .
КуМир: решение задач на строки
bytestream 28.01.2025
В системе программирования КуМир работа со строковыми данными является одним из важнейших аспектов создания программ. Строки представляют собой последовательности символов, заключенные в кавычки,. . .
КуМир: решение геометрических задач
bytestream 28.01.2025
Программирование геометрических задач в среде КуМир становится всё более актуальным в обучении школьников и студентов. КуМир — это разработанная в России обучающая программная среда, предназначенная. . .
КуМир, исполнитель Водолей: Задачи и решения
bytestream 28.01.2025
КуМир — это образовательная среда для обучения программированию. Она предлагает пользователям разнообразные инструменты для разработки и отладки программ, что особенно ценно для студентов и. . .
КуМир, исполнитель Чертежник: Решение задач
bytestream 28.01.2025
КуМир (Комплект Учебных МИРов) представляет собой образовательную среду для обучения основам программирования и алгоритмизации. Исполнитель Чертежник работает на координатной плоскости, где может. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru