我很久沒有編寫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