реклама на сайте
подробности

 
 
> С++, указатель на метод класса
Troll
сообщение Jul 21 2008, 11:41
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 104
Регистрация: 30-06-05
Из: С-Петербург
Пользователь №: 6 406



Добрый день.

Решил описать периферию контроллера ARM при помощи классов.

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

Создать указатель на метод класса не проблема:
void (cPIT::*pm) (void);
pm = &cPIT::int_handler;

А вот указать этот адрес в качестве обработчика события уже проблема:
AIC->AIC_SVR[AT91C_ID_SYS] = ??? smile3046.gif

Как можно указать обработчику прерывания адрес метода класса???

Спасибо.


--------------------
Hemos Pasado
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
fantex
сообщение Jul 21 2008, 12:00
Сообщение #2


Участник
*

Группа: Свой
Сообщений: 54
Регистрация: 4-11-05
Пользователь №: 10 480



Здраствуйте!!!
Отвечаю на Ваш вопрос - никак.
Обработчик прерывания должен быть типа static.
Но можно организовать статическую функцию класса, указать её в качестве обработчика прерывания и из неё уже вызывать метод класса.
Go to the top of the page
 
+Quote Post
Troll
сообщение Jul 22 2008, 03:15
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 104
Регистрация: 30-06-05
Из: С-Петербург
Пользователь №: 6 406



Цитата(fantex @ Jul 21 2008, 15:00) *
Обработчик прерывания должен быть типа static.
Но можно организовать статическую функцию класса, указать её в качестве обработчика прерывания и из неё уже вызывать метод класса.


Если объявить метод статическим, то он по сути становится обычной функцией и его можно указать как обработчик прерывания. smile.gif

Объясните пожалуйста следующее:
- Если метод статический (то есть одна функция на все экземпляры класса), как определяется метод какого экземпляра класса будет вызываться в обработчике прерывания. Вызов нужного метода происходит автоматически, или необходимо вводить какие-либо дополнительные флаги.

PS: В данный момент не могу проверить на практике, поэтому и задаю этот вопрос.

Спасибо.


--------------------
Hemos Pasado
Go to the top of the page
 
+Quote Post
fantex
сообщение Jul 22 2008, 04:26
Сообщение #4


Участник
*

Группа: Свой
Сообщений: 54
Регистрация: 4-11-05
Пользователь №: 10 480



Цитата(Troll @ Jul 22 2008, 07:15) *
Объясните пожалуйста следующее:
- Если метод статический (то есть одна функция на все экземпляры класса), как определяется метод какого экземпляра класса будет вызываться в обработчике прерывания. Вызов нужного метода происходит автоматически, или необходимо вводить какие-либо дополнительные флаги.

PS: В данный момент не могу проверить на практике, поэтому и задаю этот вопрос.

Спасибо.


Определяете статический указатель на экземпляр класса, инициализируете его нужным экземпляром и вызываете метод обработчика через данный указатель.

object->IntHandler();
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th July 2025 - 23:35
Рейтинг@Mail.ru


Страница сгенерированна за 0.01404 секунд с 7
ELECTRONIX ©2004-2016