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
If this post helped you, please consider buying me a coffee or donating via PayPal to support research & publishing of new posts on TechOverflow