Non ho scritto codice C++ da molto tempo; comunque ora devo lavorare su un DSP F28335 di strumenti texas e sto provando a migrare da C a C++. Ho il seguente codice che sta cercando di inizializzare una routine di servizio di interruzione con un metodo statico di una classe:Puntatore cast di C++ al metodo statico
//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;
}
Quando si compila ottengo il seguente:
error: a value of type "void (*)()" cannot be assigned to an entity of type "PINT"
Credo che mi manca qualche cast.
La parola chiave 'interrupt' non fa parte di C++. Deve essere un'estensione specifica per la tua implementazione. Cosa succede se lo rimuovi dalle definizioni di 'PINT' e' Epwm1InterruptHandler'? Hai ancora un errore? –
Nella mia esperienza la qualità dei compilatori TI per i processori DSP non è impressionante nemmeno per C (ad esempio siamo rimbalzati più di una volta in bug del generatore di codice sui casi limite di gestione delle pagine). Sei sicuro che la migrazione a un linguaggio molto più complesso come il C++ sia una buona idea? – 6502
se prendo "interrupt" l'errore è fuori ... Tuttavia non sono sicuro delle implicazioni che ha. Stavo pensando che migrare al C++ sarebbe una buona idea per avere tutto più strutturato (classi, oggetti, schemi di progettazione, ecc.) Poiché il nostro codice C sta iniziando a sembrare molto disordinato. – TropE