c++ - 类内中断

标签 c++ arduino interrupt arduino-uno interrupt-handling

我正在尝试编写一个库来使用中断计算 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,因此无需在 .cpp 文件中再次声明。

类似问题有个很好的回答here进一步澄清原因。

关于c++ - 类内中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37287468/

相关文章:

c - Arduino - 如何将 char* 复制到 char**?

assembly - 中断 13 (ah=48) - 不工作

c++ - 三元运算的结果(类型)是什么?

c++ - 为什么将数组作为 "int *& name"传递?

c++ - 递增if语句arduino

java - 如何通过 I2c 读取更多字节

c++ - APR 和大文件

c++ - 有没有办法检查(在控制台应用程序中)是否在键盘上按下了 a-z 和 1-9 中的任何字母数字键?

java - 使用 Java 监听 Thread 中的传入流

linux - 当操作系统为 "on its own"时,内核是否停止运行 "fully loaded"?