Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.93/28: Рейтинг темы: голосов - 28, средняя оценка - 4.93
MorkTwys
0 / 0 / 0
Регистрация: 07.02.2016
Сообщений: 124
1

Добавление процедуры прерывания в класс

31.05.2016, 22:56. Просмотров 5205. Ответов 8
Метки нет (Все метки)

Добрый вечер!

К примеру написал я класс на с++, для работы которого надо прерывание по переполнению таймера!
Как сделать так, чтобы прерывание было частью класса?
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.05.2016, 22:56
Ответы с готовыми решениями:

Вызов прерывания в обработке прерывания
В программе,нажатие кнопки вызывает прерывание,в котором оно обрабатывается.Попутно в обработке...

Процедуры, прерывания [FASM]
У FASM бзик на процедуры? ибо классический синтаксис не работает, использую обыкновенные метки с...

[Вопрос] Перехват прерывания прямым доступом к вектору прерывания
Всех приветствую! В данный момент разбираюсь с обработкой аппаратного прерывания (прерывание...

Вычислить адрес вектора прерывания по номеру прерывания.
17. По заданному номеру прерывания (13 h) вычислите логические адреса хранения исходных адресов...

Добавление процедуры
подскажите есть такая функция или параметр в делфи чтобы он рядом добавлял окошко и записывать...

8
Ymtikrotor
0 / 0 / 0
Регистрация: 15.06.2011
Сообщений: 174
31.05.2016, 23:27 2
Можно добавить в класс статический метод и вызывать его в прерывании.
0
MorkTwys
0 / 0 / 0
Регистрация: 07.02.2016
Сообщений: 124
31.05.2016, 23:30 3
Цитата Сообщение от Ymtikrotor
Можно добавить в класс статический метод и вызывать его в прерывании.
Можно! Но это не вариант.
0
MorkTwys
0 / 0 / 0
Регистрация: 07.02.2016
Сообщений: 124
31.05.2016, 23:36 4
Код
#  define ISR(vector, ...)            \
extern "C" void vector (void) __attribute__ ((syknal,__INTR_ATTRS)) __VA_ARGS__; \
void vector (void)
НАшел в "avr/interrupt.h" - что здесь вообще происход, можете расказать, ну или как это все работает!

Кстати, я можно ли написать свою обработку прерывания?
0
31.05.2016, 23:36
itysiy
0 / 0 / 0
Регистрация: 18.01.2012
Сообщений: 1,418
31.05.2016, 23:41 5
Я вот тут давно похожее спрашивал. В итоге решили тому, что можно посмотреть у ардуины и у mbeda
0
MorkTwys
0 / 0 / 0
Регистрация: 07.02.2016
Сообщений: 124
31.05.2016, 23:54 6
Цитата Сообщение от itysiy
Я вот тут давно похожее спрашивал. В итоге решили тому, что можно посмотреть у ардуины и у mbeda
А где оно в Arduino лежит?
НУ или примерчик скинь, если есть!
0
itysiy
0 / 0 / 0
Регистрация: 18.01.2012
Сообщений: 1,418
01.06.2016, 00:04 7
Цитата Сообщение от MorkTwys
А где оно в Arduino лежит?
К примеру можно посмотреть реализацию Serial. Там создается статический обхект. И из сишной функции прерывания уже вызывается Serial._rx_somplete_irq();
Вот тут

У mbed сложнее. Там класс менеджер прерываний, в котором ты в рантайме функцию любого объекта подписываешь на нужное прерывание
Вот тут
0
Mitzsshtomki
0 / 0 / 0
Регистрация: 16.02.2016
Сообщений: 150
01.06.2016, 02:39 8
Цитата Сообщение от MorkTwys
Добрый вечер!

К примеру написал я класс на с++, для работы которого надо прерывание по переполнению таймера!
Как сделать так, чтобы прерывание было частью класса?
Если хотите зарегистрировать метод класса в качестве обработчика прерывания, то сделать это ни как не получится. Дело в том, что методы классов "привязаны" к экземплярам классов (в метод класса передаётся указатель this). И если такой метод зарегистрировать в качестве обработчика прерывания, то при вызове этого обработчика (по прерыванию), не понятно к какому экземпляру класса этот обработчик "привязан".
Первый вариант -- создать глобальный экземпляр класса и в обработчике прерываний вызывать методы для этого глобального экземпляра (пример привели -- Serial в Arduino).
Второй вариант:
<ul><li>сначала создается экземпляр класса;</li><li>потом декларируется метод, который "знает", что он должен "работать" с конкретным экземпляром класса или знает как это экземпляр получить;</li><li>этот метод регистрируется в качестве обработчика прерывания (как регистрировать методы в качестве обработчика прерываний динамически можно подсмотреть в Arduino -- attachYmtirrupt);</li><li>если в методу нужен доступ к закрытым членам класса, то его нужно объявить как friend в декларации класса.</li></ul>
При первом варианте экземпляр класса один и нельзя его поменять, при втором варианте можно экземпляры класса создавать динамически в процессе работы.
0
MorkTwys
0 / 0 / 0
Регистрация: 07.02.2016
Сообщений: 124
01.06.2016, 10:18 9
Цитата Сообщение от Mitzsshtomki
Цитата Сообщение от MorkTwys
Добрый вечер!

К примеру написал я класс на с++, для работы которого надо прерывание по переполнению таймера!
Как сделать так, чтобы прерывание было частью класса?
Если хотите зарегистрировать метод класса в качестве обработчика прерывания, то сделать это ни как не получится. Дело в том, что методы классов "привязаны" к экземплярам классов (в метод класса передаётся указатель this). И если такой метод зарегистрировать в качестве обработчика прерывания, то при вызове этого обработчика (по прерыванию), не понятно к какому экземпляру класса этот обработчик "привязан".
Первый вариант -- создать глобальный экземпляр класса и в обработчике прерываний вызывать методы для этого глобального экземпляра (пример привели -- Serial в Arduino).
Второй вариант:
<ul><li>сначала создается экземпляр класса;</li><li>потом декларируется метод, который "знает", что он должен "работать" с конкретным экземпляром класса или знает как это экземпляр получить;</li><li>этот метод регистрируется в качестве обработчика прерывания (как регистрировать методы в качестве обработчика прерываний динамически можно подсмотреть в Arduino -- attachYmtirrupt);</li><li>если в методу нужен доступ к закрытым членам класса, то его нужно объявить как friend в декларации класса.</li></ul>
При первом варианте экземпляр класса один и нельзя его поменять, при втором варианте можно экземпляры класса создавать динамически в процессе работы.

Хотелось бы реализовать второй метод, надо как то разобратся с декларированием методов!
0
01.06.2016, 10:18
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.06.2016, 10:18

Добавление процедуры в кнопку
Вечер добрый. Во внешней обработке создал кнопку, как теперь мне заставить её при нажатие...

Добавление процедуры в программу
Всем привет! Имеется программа, работает правильно, но ее нужно сделать с процедурами или...

Изменение процедуры (добавление цикла)
Всем привет! Еще раз! :) Имеется код, который &quot;берет&quot; текст из edit и разбивает по 7 символов по...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.