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

 
 
> прерывания в C++, как оформить ISR?
Aprox
сообщение May 23 2012, 09:52
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 374
Регистрация: 7-11-07
Из: Moscow
Пользователь №: 32 131



В разделе по scmRTOS, в процессе диспута про OS, я встретил пример кода на C++, в котором был представлен некий класс, описывающий работу UART. И в этом классе один из методов якобы был обработчиком прерывания! Как сделать обработчик прерывания отдельной функцией- мне понятно. Но как сделать метод класса таким обработчиком- совершенно неясно в практическом плане. Я работаю с кристаллами STM32 Cortex, пишу на C++, поэтому очень интересует данный вопрос. Если кто умеет назначать метод класса обработчиком прерываний- буду крайне признателен за наводку.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
_Артём_
сообщение May 23 2012, 10:05
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(Aprox @ May 23 2012, 12:52) *
В разделе по scmRTOS, в процессе диспута про OS, я встретил пример кода на C++, в котором был представлен некий класс, описывающий работу UART. И в этом классе один из методов якобы был обработчиком прерывания! Как сделать обработчик прерывания отдельной функцией- мне понятно. Но как сделать метод класса таким обработчиком- совершенно неясно в практическом плане. Я работаю с кристаллами STM32 Cortex, пишу на C++, поэтому очень интересует данный вопрос. Если кто умеет назначать метод класса обработчиком прерываний- буду крайне признателен за наводку.


Обсуждалось например тут:ссылка


Цитата(_Артём_ @ May 23 2012, 12:59) *
Обсуждалось например тут:ссылка


Вот ещё пример
Код
class Tuart_class {
public:
    #pragma vector=TCE0_OVF_vect
    __interrupt static void UsartHandler()
    {
        unsigned char i=USART_GetChar(&USARTC0);
    }
    
};
Go to the top of the page
 
+Quote Post
Aprox
сообщение May 23 2012, 12:30
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 374
Регистрация: 7-11-07
Из: Moscow
Пользователь №: 32 131



Цитата(_Артём_ @ May 23 2012, 13:05) *
Обсуждалось например тут:ссылка

Спасибо за ответ. Но ваша ссылка касается обсуждения исключительно в рамках scmRTOS, авторы которой наделали кучу заголовочных файлов с удобными им макросами. Я же работаю в стандарте C++ IAR v6.0 c библиотекой CMSIS специально для STM32. В этой библиотеке уже заготовлены все возмжные для каждого кристалла обработчики прерываний с заданными именами, начально это пустышки. Юзеру остается только наполнить эти пустые ISR своим конкретным кодом и обьявить этот обработчик дружественным в нужных классах. Других путей я не вижу.

Цитата
Вот ещё пример
Код
class Tuart_class {
public:
    #pragma vector=TCE0_OVF_vect
    __interrupt static void UsartHandler()
    {
        unsigned char i=USART_GetChar(&USARTC0);
    }
    
};


В хелпе IAR v6.0 для ARM и Cortex я не нашел управляющего слова __interrupt. А у директивы pragma не нашел параметра vector. Что я делаю не так?



Цитата(ReAl @ May 23 2012, 13:24) *
Но с inline-подстановкой обработчика работать будет не хуже, зато можно вызвать нестатический метод конкретного объекта.

По-моему inline-подстановка в данном случае используется не по назначению. Не для этого она придумана. Да и вообще, задача сделать метод класса обработчиком прерывания имеет чисто академический интерес из той же серии- использовать обьектное программирование не по назначению.
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 09:32
Рейтинг@Mail.ru


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