我很久没有编写C++代码;但是现在我必须在德克萨斯仪器公司的F28335 DSP上工作,我正试图从C迁移到C++。 我有以下的代码,试图用类的静态方法来初始化中断服务程序:C++强制转换指向静态方法的指针
//type definition for the interrupt service routine
typedef interrupt void (*PINT)(void);
//EPWMManager.h
class EPWMManager
{
public:
EPWMManager();
static interrupt void Epwm1InterruptHandler(void);
};
//EPWMManager.cpp
interrupt void EPWMManager::Epwm1InterruptHandler(void)
{
//some code to be called on interruption
}
//main.cpp
int main(void)
{
PINT p;
p = &(EPWMManager::Epwm1InterruptHandler);
return 0;
}
编译时,我得到以下几点:
error: a value of type "void (*)()" cannot be assigned to an entity of type "PINT"
我猜我失踪一些演员。
“中断”关键字不是C++的一部分。它必须是特定于您的实施的扩展。如果将它从'PINT'和'Epwm1InterruptHandler'的定义中移除,会发生什么?你还有错误吗? –
根据我的经验,即使对于C语言来说,DSP编译器的TI编译器质量也不是很好(例如,我们在页面处理的边界情况下在代码生成器的错误中反弹了不止一次)。你确定迁移到像C++这样复杂得多的语言是一个好主意吗? – 6502
如果我把'中断'出来的错误出来......但我不确定它的影响。因为我们的C代码看起来非常混乱,我以为迁移到C++会是一个好主意,以便让所有东西都更加结构化(类,对象,设计模式等)。 – TropE