您不能将方法传递给需要函数的函数,除非您将其定义为静态的。
写成静态的:
static void velocity::functionISR_name()
和
attachInterrupt(&velocity::functionISR_name);
不幸的是,静态方法不再绑定到特定实例。您应该只将它与单例一起使用。在 Arduino 上,您应该在代码片段中编写如下所示的类:
class velocity
{
static velocity *pThisSingelton;
public:
velocity()
{
pThisSingelton=this;
}
static void functionISR_name()
{
pThisSingelton->CallWhatEverMethodYouNeeded();
// Do whatever needed.
}
// … Your methods
};
velocity *velocity::pThisSingelton;
velocity YourOneAndOnlyInstanceOfThisClass;
void setup()
{
attachInterrupt(&velocity::functionISR_name);
// …other stuff…
}
这看起来很难看,但在我看来,Arduino 完全没问题,因为这样一个系统的机会非常有限。
再想一想,我个人会选择索林在上面的回答中提到的方法。那会更像这样:
class velocity
{
public:
velocity()
{
}
static void functionISR_name()
{
// Do whatever needed.
}
// … Your methods
};
velocity YourOneAndOnlyInstanceOfThisClass;
void functionISR_name_delegation()
{
YourOneAndOnlyInstanceOfThisClass.functionISR_name();
}
void setup()
{
attachInterrupt(functionISR_name_delegation);
// …other stuff…
}
它还会为您在第一个示例中所需的指针节省一些字节。
作为站点说明:对于将来,请发布确切的代码(例如 attachInterrupt 需要更多参数)并复制并粘贴错误消息。通常错误在你不怀疑的地方是准确的。这个问题是个例外。通常我和其他人会要求更好的规范。