Прерывания в классе

Я пытаюсь написать библиотеку для расчета периода работы ШИМ с использованием прерываний. Я понимаю, что член класса не является правильным форматом функции для attachInterrupt.

Тем не менее, я попытался следовать этому посту Вызов ISR из класса от Ник Гаммон, у кого есть обходной путь, но, к сожалению, я все еще получаю ошибку:

не может объявить функцию-член static void PWMin :: riseInt () для статической связи

Может ли кто-нибудь пролить свет на то, что не так с моим кодом или какими-либо другими предложениями?

Это файл cpp:

#include "PWMin.h"
PWMin::PWMin(int intPin, int* outputTime, bool direction=true){
instance = this;

this->_intPin = intPin;
this->_outputTime = outputTime;
this->_direction = direction;

pinMode(this->_intPin, INPUT);
attachInt();
}

void PWMin::attachInt(){
attachInterrupt(this->_intPin, this->_direction ? risingInt : fallingInt, this->_direction ? RISING : FALLING);
}

void PWMin::risingISR(){
this->start = micros();
this->_direction = false;
this->attachInt();
}

void PWMin::fallingISR(){
this->timeElapsed = micros() - this->start;
*_outputTime = this->timeElapsed;
this->_direction = true;
this->attachInt();
}

unsigned long PWMin::lastElapsedTime(){
return this->timeElapsed;
}

static void PWMin::risingInt(){
if(PWMin::instance != NULL){
PWMin::instance->risingISR();
}
}

static void PWMin::fallingInt(){
if(PWMin::instance != NULL){
PWMin::instance->fallingISR();
}
}

Это заголовочный файл:

#ifndef PWMin_h
#define PWMin_h

class PWMin {
public:
PWMin(int intPin, int* outputTime, bool direction);
unsigned long lastElapsedTime();

private:
static PWMin *instance;

int _intPin;
int* _outputTime;
bool _direction;
unsigned long start, timeElapsed;

void attachInt();
void risingISR();
void fallingISR();
static void risingInt();
static void fallingInt();
};

#endif /* PWMin_h */

Спасибо,
Shaun

2

Решение

В вашем заголовочном файле вы объявили свои функции как static, поэтому нет необходимости делать это снова в вашем файле .cpp.

Есть хороший ответ на подобный вопрос Вот для дальнейшего разъяснения, почему.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]