我正在嘗試編寫一個庫來使用中斷來計算PWM佔空比。我知道一個類成員不是attachInterrupt函數的正確格式。一個類中的中斷
不過,我曾試圖遵循這個帖子Calling an ISR from a class由Nick Gammon,誰擁有一個變通,但令人沮喪的我仍然得到錯誤:
cannot declare member function 'static void PWMin::risingInt()' to have static linkage
可有人請照有什麼錯一些輕我的代碼或任何其他建議?
這是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 */
感謝, 肖恩
如您所做的那樣,您將'static'作爲成員函數放入類定義中;不要在線外功能體 –
@ M.M中重複它。對不起,當你說'線外功能體'時,我並不完全遵循。你能否詳細解釋一下?謝謝 –
從'static void PWMin :: risingInt(){'和'static void PWMin :: fallingInt(){' –