Выполните любые действия, требуемые однажды при завершении симуляции
Да
C, C++
void mdlCleanupRuntimeResources(SimStruct *S)
S
SimStruct, представляющий Блок s-function.
Этот метод выполняет любые действия, такие как освобождение от памяти, которая должна быть выполнена, когда симуляция отключена или когда Блок s-function уничтожается (например, когда это удалено из модели).
В S-функциях MEX C, mdlCleanupRuntimeResources
метод называется после симуляции (mdlSetupRuntimeResources
называется), и это инвертирует действия, выполняемые mdlSetupRuntimeResources
.
Если у вас есть Simulink® Coder™ при генерации кода для невстроенной S-функции MEX C, которая содержит этот метод, убедитесь, что метод не перенесен в #if defined(MATLAB_MEX_FILE)
оператор. Например:
#if defined(MATLAB_MEX_FILE) static void mdlCleanupRuntimeResources(SimStruct *S) { /* Add mdlCleanupRuntimeResources code here * } #endif
define
оператор делает mdlCleanupRuntimeResources
метод, доступный только для файла MEX MATLAB®. Если S-функция не встраивается, Simulink Coder не может использовать этот метод, приводящий к ссылке или ошибкам времени выполнения.
Предположим, что ваша S-функция выделяет блоки памяти в mdlSetupRuntimeResources
и сохраняет указатели на блоки в PWork
вектор. Следующий фрагмент кода освободил бы эту память.
#define MDL_CLEANUP_RUNTIME_RESOURCES static void mdlCleanupRuntimeResources(SimStruct *S) { int i; for (i = 0; i<ssGetNumPWork(S); i++) { if (ssGetPWorkValue(S,i) != NULL) { free(ssGetPWorkValue(S,i)); } } }
mdlSetupRuntimeResources
, ssSetOptions
, Terminate
, Запуск с быстрым перезапуском