he conseguido localizar el puntero que se va, pero no sé porqué.
Este es el código
BOOL CAN1RxMsgProcess( void){
if (isCAN1MsgReceived == FALSE) {
return FALSE;
}
isCAN1MsgReceived = FALSE;
messageRX = (CANRxMessageBuffer *)CANGetRxMessage(CAN1,CAN_CHANNEL1);
CANUpdateChannel(CAN1, CAN_CHANNEL1);
CANEnableChannelEvent(CAN1, CAN_CHANNEL1, CAN_RX_CHANNEL_NOT_EMPTY, TRUE);
return TRUE;
}
la variable isCAN1MsgReceived se activa en la interrupción del can, si recibo algo y el puntero messageRX está definido en la librería
el código va perfectamente salvo si recibo datos rápido, con 1s ya se va a la excepción