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 Sie ssSetPWorkValue() sicher verwenden können.

sssetpwork_example.cpp
#define MDL_START
static void mdlStart(SimStruct *S)
{
    // Allocate memory for the pointer work vector
    ssSetPWorkValue(S, 0, new MyDataStructure());
}

Check out similar posts by category: Matlab/Simulink