exponenta event banner

mdlTerminate

Выполнение любых действий, необходимых для завершения моделирования

Необходимый

Да

Языки

C, C++

Синтаксис

void mdlTerminate(SimStruct *S)

Аргументы

S

SimStruct представляет S-функциональный блок.

Описание

Этот метод выполняет любые действия, такие как освобождение памяти, которые должны выполняться при завершении моделирования или при уничтожении S-функционального блока (например, при удалении из модели). Этот метод вызывается в конце каждого моделирования в режиме быстрого перезапуска.

В S-функциях C MEX mdlTerminate вызывается после моделирования (mdlStart называется).

Кроме того, если SS_OPTION_CALL_TERMINATE_ON_EXIT устанавливается для данной S-функции, и если mdlInitializeSizes вызывается, то пользователю гарантируется, что Simulink позвонит mdlTerminate. Одна из причин установить SS_OPTION_CALL_TERMINATE_ON_EXIT - выделение памяти в mdlInitializeSizes вместо того, чтобы ждать до mdlStart.

Обратите внимание, что вызовы Simulink mdlInitializeSizes в ряде обстоятельств, включая компиляцию и моделирование. Simulink также позвонит mdlInitializeSizes при редактировании модели, если выполняется такая операция, как настройка параметров.

В C MEX S-функциях используйте UNUSED_ARG макро, если mdlTerminate функция не выполняет никаких действий, требующих SimStruct S чтобы указать, что S входной аргумент является обязательным, но не используется в теле обратного вызова. Для этого вставьте строку

UNUSED_ARG(S)

после любых объявлений в mdlTerminate.

Примечание

Если у вас есть Simulink ® Coder™, при создании кода для неинлинной C MEX S-функции, содержащей этот метод, убедитесь, что метод не заключен в #if defined(MATLAB_MEX_FILE) заявление. Например:

#if defined(MATLAB_MEX_FILE) 
static void mdlTerminate(SimStruct *S) 
{ 
   /* Add mdlTerminate code here *
} 
#endif 

define оператор делает mdlTerminate метод доступен только для файла MATLAB ® MEX. Если S-функция не встроена, Simulink Coder не может использовать этот метод, что приводит к ошибкам канала или времени выполнения.

Пример

Предположим, что функция S выделяет блоки памяти в mdlStart и сохраняет указатели на блоки в PWork вектор. Следующий фрагмент кода освободит эту память.

{
  int i;
  for (i = 0; i<ssGetNumPWork(S); i++) {
    if (ssGetPWorkValue(S,i) != NULL) {
      free(ssGetPWorkValue(S,i));
    }
  }
}

См. также

ssSetOptions, Terminate

Представлен до R2006a