| Writing S-Functions | ![]() |
Example Involving a Pointer Work Vector
This example opens a file and stores the FILE pointer in the pointer-work vector.
The following statement, included in the mdlInitializeSizes function, indicates that the pointer-work vector is to contain one element.
The following code uses the pointer-work vector to store a FILE pointer, returned from the standard I/O function fopen.
#define MDL_START /* Change to #undef to remove function. */ #if defined(MDL_START) static void mdlStart(real_T*x0, SimStruct*S) { FILE*fPtr; void **PWork = ssGetPWork(S); fPtr = fopen("file.data", "r"); PWork[0] = fPtr; } #endif /* MDL_START */
This code retrieves the FILE pointer from the pointer-work vector and passes it to fclose to close the file.
static void mdlTerminate(SimStruct *S)
{
if (ssGetPWork(S) != NULL) {
FILE *fPtr;
fPtr = (FILE *) ssGetPWorkValue(S,0);
if (fPtr != NULL) {
fclose(fPtr);
}
ssSetPWorkValue(S,0,NULL);
}
}
#define MDL_SET_WORK_WIDTHS /* Change to #undef to remove function. */ #if defined(MDL_SET_WORK_WIDTHS) && defined(MATLAB_MEX_FILE) static void mdlSetWorkWidths(SimStruct *S) { } #endif /* MDL_SET_WORK_WIDTHS */
For an example, see matlabroot/simulink/src/sfun_dynsize.c.
| Work Vectors and Zero Crossings | Memory Allocation | ![]() |