【发布时间】:2017-01-03 12:36:56
【问题描述】:
我为 Arduino 编写了一个使用中断的类。目前我需要在主 Arduino 草图中创建 ISR 的实例,然后将其传递给类的初始化函数,该函数运行“attachInterrupt”。这是非常糟糕的风格(为什么用户应该知道我什至在使用中断?),所以我希望整个内容包含在类的头文件和源文件中。
我尝试将 ISR 设为静态友元函数,但它无法访问任何类的非静态成员。因此,现在我对这种方法的工作应该和不应该是静态的有点困惑。我试图做的事情看起来像这样(源代码和标题在这里结合起来以便于阅读)
class myClass{
friend void ISR();
void init(){attachInterrupt(ISR,..,..);}
}
static void ISR(){
all sort of stuff using myClass.members;
}
但是编译器因为我在静态函数中使用非静态成员而对我大喊大叫。 我真的很感激能帮助我理解如何让它发挥作用。
【问题讨论】:
-
"为什么用户应该知道我什至在使用中断?"因为你正在使用微控制器的独特功能,所以他需要知道它,这样他才能计划如何管理它。如果您对一个引脚使用更改时中断,并且您不希望他看到它,那么他将无法对其他所有引脚使用更改时中断,因为 ISR 已经实现由你。只需在 ISR 中创建一个他必须调用的函数,或者将 ISR 写在宏中并让他在主代码中编写它
标签: c++ class arduino interrupt