Ciao a tutti ho un problema,
ho una funzione per registrare un interrupt, con questo prototipo:
codice:
Error_t __DECL ddcSetBCRTEvent(Device_p pCrd, Error_t(*usr_handler)(Device_p pCrd, S16BIT type, S16BIT param));
se la utilizzo in codice c non dà problemi. Io però ho bisogno di includerla in un mio progetto c++ ed ho utilizzato queste classi:
file PInterruptHandler.h
codice:
class PInterruptHandler
{
private:
PConfigurationCard *configurationCard;
static PInterruptHandler *objPtr;
public:
PInterruptHandler(PConfigurationCard* configCard);
PInterruptHandler(void);
~PInterruptHandler(void);
Error_t BcIRQHandler(Device_p _pISRCrd, S16BIT _intrType, S16BIT _param);
static Error_t CallBackBcIRQHandler (Device_p _pISRCrd, S16BIT _intrType, S16BIT _param)
{
return objPtr->BcIRQHandler(_pISRCrd, _intrType, _param);
}
public:
list<MESSAGE> *messageList;
};
file PInterruptHandler.cpp
codice:
PInterruptHandler::PInterruptHandler(void)
{
}
PInterruptHandler::~PInterruptHandler(void)
{
PInterruptHandler::objPtr = nullptr;
}
PInterruptHandler::PInterruptHandler(PConfigurationCard *configCard)
{
this->configurationCard = configCard;
PInterruptHandler::objPtr = this;
}
Error_t PInterruptHandler::BcIRQHandler(Device_p _pISRCrd, S16BIT _intrType, S16BIT _param)
{
...
}
PInterruptHandler *PInterruptHandler::objPtr = nullptr;
ho utilizzato un'altra classe, chiamata PBusController, per registrare il metodo statico in questo modo:
PBusController.h
codice:
PBusController::PBusController(PConfigurationCard* configCard)
{
...
this->interruptHandler = new PInterruptHandler(this->configurationCard);
...
}
S32BIT PBusController::SetInterrupt(S16BIT mask)
{
S32BIT Err;
if(Err = ddcSetBCRTEvent(this->configurationCard->device, &(PInterruptHandler::CallBackBcIRQHandler)))
{
return Err;
}
...
}
La compilazione va a buon fine, ma quando viene generato l'interrupt il programma va in crash.
Non so più cosa fare, qualcuno ha qualche idea???
Grazie!!!!!