Выполните любые действия, необходимые один раз при прекращении симуляции
Да
C, C++
void mdlCleanupRuntimeResources(SimStruct *S)
S
SimStruct, представляющий блок S-Function.
Этот метод выполняет любые действия, такие как освобождение памяти, которые должны выполняться, когда симуляция завершена или когда блок S-Function уничтожен (например, когда он удален из модели).
В S-функциях MEX на C, mdlCleanupRuntimeResources
метод вызывается после симуляции (mdlSetupRuntimeResources
вызывается), и это отменяет действия, выполненные mdlSetupRuntimeResources
.
Примечание
Если у вас есть Simulink® Coder™ при генерации кода для неинлинфицированной S-функции C MEX, которая содержит этот метод, убедитесь, что метод не упакован в #if defined(MATLAB_MEX_FILE)
оператор. Для примера:
#if defined(MATLAB_MEX_FILE) static void mdlCleanupRuntimeResources(SimStruct *S) { /* Add mdlCleanupRuntimeResources code here * } #endif
The define
оператор делает mdlCleanupRuntimeResources
метод, доступный только для MATLAB® Файл MEX. Если 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)); } } }