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 | ![]() |