【发布时间】:2011-11-17 17:15:05
【问题描述】:
我好久没写C++代码了;但是现在我必须在德州仪器 F28335 DSP 上工作,并且我正在尝试从 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;
}
编译时我得到以下信息:
错误:“void (*)()”类型的值不能分配给“PINT”类型的实体
我想我错过了一些演员表。
【问题讨论】:
-
interrupt关键字不是 C++ 的一部分。它必须是特定于您的实现的扩展。如果从PINT和Epwm1InterruptHandler的定义中删除它会发生什么?您仍然收到错误消息吗? -
根据我的经验,用于 DSP 处理器的 TI 编译器的质量即使对于 C 也并不令人印象深刻(例如,我们在页面处理边界情况下的代码生成器错误中反弹了不止一次)。您确定迁移到像 C++ 这样更复杂的语言是个好主意吗?
-
如果我把'中断'去掉,错误就出来了......但是我不确定它的含义。我认为迁移到 C++ 将是一个好主意,因为我们的 C 代码开始看起来非常混乱,以便让所有内容(类、对象、设计模式等)更加结构化。
标签: c++ methods static compiler-errors interrupt