Обработайте параметры S-функции C MEX
Нет
C, C++
#define MDL_PROCESS_PARAMETERS void mdlProcessParameters(SimStruct *S)
S
SimStruct, представляющий блок S-Function.
Это необязательная стандартная программа, которую Simulink® вызовы двигателя после mdlCheckParameters изменяет и проверяет параметры. Обработка выполняется в верхней части цикла симуляции, когда безопасно обработать измененные параметры. Эта функция действительна только для симуляции. S-функции MEX на C должны заключать метод в #if defined(MATLAB_MEX_FILE) оператор.
Целью этой стандартной программы является обработка вновь измененных параметров. Примером является кэширование изменений параметров в рабочих векторах. Механизм не вызывает эту стандартную программу, когда она используется с продуктом Simulink Coder™. Поэтому, если вы используете эту стандартную программу в S-функции, разработанной для использования с продуктом Simulink Coder, вы должны записать свою S-функцию, чтобы она не полагалась на эту стандартную программу. Для этого необходимо встроить S-функцию с помощью Target Language Compiler. Для получения информации о встраивании S-функций смотрите Inlining S-Functions (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 */