主要内容

mdlTerminate

执行模拟终止时所需的任何操作

要求

是的

语言

C, c++

语法

(SimStruct *S)

参数

年代

SimStruct表示一个S-Function块。

描述

此方法执行在模拟终止或S-Function块被销毁(例如从模型中删除)时必须执行的任何操作,例如释放内存。在快速重启模式下,每次模拟结束时都会调用此方法。

在C MEX s -函数中mdlTerminate方法在模拟(mdlStart叫)。

此外,如果SS_OPTION_CALL_TERMINATE_ON_EXIT选项为给定的s函数设置,如果mdlInitializeSizes,那么用户是保证Simulink将调用万博1manbetxmdlTerminate.设置的一个原因是SS_OPTION_CALL_TERMINATE_ON_EXIT选项是分配内存在mdlInitializeSizes而不是等到mdlStart

注意Simulink万博1manbetx调用mdlInitializeSizes在多种情况下,包括编译和仿真。万博1manbetxSimulink也会调用mdlInitializeSizes在模型编辑过程中,如果您执行了参数设置等操作。

在C MEX s -函数中,请使用UNUSED_ARG宏,如果mdlTerminate函数不执行任何需要SimStruct的操作年代以表明年代Input参数是必需的,但不在回调函数体中使用。要做到这一点,插入一行

UNUSED_ARG (S)

mdlTerminate

请注意

如果你有万博1manbetx®编码器™,当为包含此方法的非内联C MEX s函数生成代码时,请确保该方法没有包装在#如果定义(MATLAB_MEX_FILE)声明。例如:

#if defined(MATLAB_MEX_FILE) static void mdlTerminate(SimStruct *S){/*在这里添加mdlTerminate代码*}#endif . xml

定义语句使mdlTerminate方法,仅适用于MATLAB®墨西哥人文件。如果s函数不是内联的,万博1manbetx仿真软件编码器无法使用此方法,导致链接或运行时错误。

例子

假设你的s函数分配内存块mdlStart并保存指向块的指针PWork向量。下面的代码片段将释放此内存。

{int i;For (i = 0;我< ssGetNumPWork(年代);i++) {if (ssGetPWorkValue(S,i) != NULL) {free(ssGetPWorkValue(S,i));}}}

另请参阅

ssSetOptions终止

版本历史

R2006a之前介绍