Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: С++, указатель на метод класса
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Troll
Добрый день.

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

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

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

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

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

Спасибо.
fantex
Здраствуйте!!!
Отвечаю на Ваш вопрос - никак.
Обработчик прерывания должен быть типа static.
Но можно организовать статическую функцию класса, указать её в качестве обработчика прерывания и из неё уже вызывать метод класса.
defunct
Цитата(Troll @ Jul 21 2008, 14:41) *
AIC->AIC_SVR[AT91C_ID_SYS] = ???

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

(unsigned)pm;

только вот работать вероятно не будет, т.к. разные соглашения вызова.
sergeeff
Тут неплохо расписано, почему это не покатит : http://www.rsdn.ru/article/cpp/fastdelegate.xml
Troll
Цитата(fantex @ Jul 21 2008, 15:00) *
Обработчик прерывания должен быть типа static.
Но можно организовать статическую функцию класса, указать её в качестве обработчика прерывания и из неё уже вызывать метод класса.


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

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

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

Спасибо.
Andy Mozzhevilov
Цитата(Troll @ Jul 22 2008, 09:15) *
PS: В данный момент не могу проверить на практике, поэтому и задаю этот вопрос.


В свое время кидал пример в каком-то из обсуждений. Вот посмотрите, как сделано у меня:
Нажмите для просмотра прикрепленного файла

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

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

Спасибо.


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

object->IntHandler();
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.