Writing S-Functions | ![]() ![]() |
Process the S-function's parameters.
Syntax
Arguments
S
SimStruct representing an S-Function block.
Description
This is an optional routine that Simulink calls after mdlCheckParameters
changes and verifies parameters. The processing is done at the top of the simulation loop when it is safe to process the changed parameters. This routine can only be used in a C MEX S-function.
The purpose of this routine is to process newly changed parameters. An example is to cache parameter changes in work vectors. Simulink does not call this routine when it is used with the Real-Time Workshop. Therefore, if you use this routine in an S-function designed for use with the Real-Time Workshop, you must write your S-function so that it doesn't rely on this routine. To do this, you must inline your S-function by using the Target Language Compiler. See The Target Language Compiler Reference Guide for information on inlining S-functions.
#define MDL_PROCESS_PARAMETERS /* Change to #undef to remove function */ #if defined(MDL_PROCESS_PARAMETERS) && defined(MATLAB_MEX_FILE) static void mdlProcessParameters(SimStruct *S) { } #endif /* MDL_PROCESS_PARAMETERS */
Example
This example processes a string parameter that mdlCheckParameters
has verified to be of the form '+++'
(
where there could be any number of '+'
or '-'
characters).
#define MDL_PROCESS_PARAMETERS /* Change to #undef to remove function */ #if defined(MDL_PROCESS_PARAMETERS) && defined(MATLAB_MEX_FILE) static void mdlProcessParameters(SimStruct *S) { int_T i; char_T *plusMinusStr; int_T nInputPorts = ssGetNumInputPorts(S); int_T *iwork = ssGetIWork(S); if ((plusMinusStr=(char_T*)malloc(nInputPorts+1)) == NULL) { ssSetErrorStatus(S,"Memory allocation error in mdlStart"); return; } if (mxGetString(SIGNS_PARAM(S),plusMinusStr,nInputPorts+1) != 0) { free(plusMinusStr); ssSetErrorStatus(S,"mxGetString error in mdlStart"); return; } for (i = 0; i < nInputPorts; i++) { iwork[i] = plusMinusStr[i] == '+'? 1: -1; } free(plusMinusStr); } #endif /* MDL_PROCESS_PARAMETERS */
mdlProcessParameters
is called from mdlStart
to load the signs string prior to the start of the simulation loop.
#define MDL_START #if defined(MDL_START) static void mdlStart(SimStruct *S) { mdlProcessParameters(S); } #endif /* MDL_START */
For more details on this example, see matlabroot
/simulink/src/sfun_multiport.c
.
Languages
See Also
![]() | mdlOutputs | mdlRTW | ![]() |