Matlab S-Functions: Wo verwendet man ssSetPWorkValue()?

Matlabs ssSetPWorkValue() darf nicht in der Funktion mdlInitializeSizes einer S-Funktion verwendet werden. Dies liegt daran, dass die Funktion mdlInitializeSizes aufgerufen wird, bevor die Work-Vektoren der S-Funktion zugewiesen werden.

Die Verwendung in mdlInitializeSizes() führt zu einem Segmentation Fault, was einen Matlab/Simulink-Absturz zur Folge hat.

Der korrekte Ort zur Verwendung von ssSetPWorkValue() ist die Funktion mdlStart. Diese Funktion wird aufgerufen, nachdem die Work-Vektoren zugewiesen wurden, und ist die erste Funktion, in der du ssSetPWorkValue() sicher verwenden kannst.

sssetpwork_example.cpp
#define MDL_START
static void mdlStart(SimStruct *S)
{
    // Speicher für den Pointer-Work-Vektor reservieren
    ssSetPWorkValue(S, 0, new MyDataStructure());
}

Ähnliche Beiträge nach Kategorie: Matlab/Simulink