Обработайте параметры S-функции MEX C
Нет
C, C++
#define MDL_PROCESS_PARAMETERS void mdlProcessParameters(SimStruct *S)
S
SimStruct, представляющий Блок s-function.
Это - дополнительная стандартная программа, что вызовы механизма Simulink® после mdlCheckParameters
изменяют и проверяют параметры. Обработка сделана наверху цикла симуляции, когда безопасно обработать измененные параметры. Эта функция только допустима для симуляции. C S-функции MEX должен заключить метод в оператор #if defined(MATLAB_MEX_FILE)
.
Цель этой стандартной программы состоит в том, чтобы обработать недавно измененные параметры. Пример должен кэшировать изменения параметра в векторах работы. Механизм не вызывает эту стандартную программу, когда это используется с продуктом Simulink Coder™. Поэтому, если вы используете эту стандартную программу в S-функции, разработанной для использования с продуктом Simulink Coder, необходимо записать S-функцию так, чтобы это не полагалось на эту стандартную программу. Для этого необходимо встроить S-функцию при помощи Компилятора Выходного языка. Для получения информации о встраивании S-функций смотрите S-функции Встраивания (Simulink Coder).
Этот пример обрабатывает параметр вектора символов, который mdlCheckParameters
проверил, чтобы иметь форму '+++'
(где могло быть любое количество '+'
или символов '-'
).
#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
называется от mdlStart
, чтобы загрузить вектор символов знаков до запуска цикла симуляции.
#define MDL_START #if defined(MDL_START) static void mdlStart(SimStruct *S) { mdlProcessParameters(S); } #endif /* MDL_START */