Как ссылаться на метод объекта внутри "подпрограммы обработки прерывания (ISR)"
Я пытаюсь сослаться на метод с именем 'update();' внутри класса с именем 'displayLED' образуют ISR. Как мне правильно это сделать?
Вот как я пытаюсь это сделать: файл displayLED.h
#ifndef DISPLAYLED_H
#define DISPLAYLED_H
#include "Arduino.h"
#include <avr/interrupt.h>
class displayLED
{
public:
static displayLED *singleton;
displayLED();
void update();
void interrupt() const;
};
#ifndef displayLED_CUSTOM_INTERRUPT
//Timer 2 interrupt service routine (ISR)
ISR(TIMER2_COMPA_vect) {
cli();
displayLED::singleton->update();
sei();
};
#endif
#endif
А вот и файл displayLED.cpp
#include "displayLED.h"
displayLED displayLED::*singleton;
displayLED::displayLED() {
interrupt();
displayLED::singleton = this;
}
void displayLED::interrupt() const
{
cli();
TCCR2A = 0; // set TCCR2A register to 0
TCCR2B = 0; // set TCCR2B register to 0
TCNT2 = 0; // reset counter value
OCR2A = 55; // compare match register
TCCR2B |= (1 << CS21); // prescaler 8
TCCR2B |= (1 << WGM22); // turn on CTC mode
TIMSK2 |= (1 << OCIE2A); // enable timer compare interrupt
sei();
}
void displayLED::update()
{
//very brief & fast stuff
}
И вот ошибки, которые я получаю.
multiple definition of `__vector_7'
Это для ATmega 328. Я пытаюсь использовать Таймер 2.