Как ссылаться на метод объекта внутри "подпрограммы обработки прерывания (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.

0 ответов

Другие вопросы по тегам