甲noninlined S-功能是受Simulink的相同处理的C或C ++ MEX S函数万博1manbetx®发动机,并通过生成的代码。你实现你的算法根据S函数API一次。Simu万博1manbetxlink的引擎和生成的代码调用S函数例程(例如,mdlOutputs
)模型执行期间。
Noninlined S-功能由不存在所识别的
文件为您的S-功能。文件名称取决于您的平台。例如,在64位Microsoft®视窗®系统,文件名是sfunction
.tlc
。在MATLAB®命令行窗口,键入sfunction
。mexw64
mexext
看到你的系统使用的扩展。
该MEX文件不能调用MATLAB功能。
如果MEX-文件使用在MATLAB外部接口库中的函数,包括头文件cg_sfun.h
代替mex.h
要么万博1manbetxsimulink.c
。对于头文件cg_sfun.h
在您的S-函数的末尾,包括这些行:
#ifdef来MATLAB_MEX_FILE / *这个文件被编译成MEX文件?* /#包括 “simul万博1manbetxink.c”/ * MEX-文件接口机制* / #else伪的#include “cg_sfun.h”/ *代码生成登记功能* / #ENDIF
只能使用MATLAB API函数的代码生成支持。万博1manbetx支持的A万博1manbetxPI函数有:
mxGetEps
mxGetInf
mxGetM
mxGetN
mxGetNaN
mxGetPr
mxGetScalar
mxGetString
mxIsEmpty
mxIsFinite
mxIsInf
MEX库调用不会在生成的代码支持。万博1manbetx要在MEX文件中生成的代码中使用这样的电话和没有,添加以下条件:
#ifdef来MATLAB_MEX_FILE #ENDIF
使用只包含实际数据只有满矩阵。
不要指定调用返回值mxGetString
。如果您指定一个返回值,该MEX文件不会编译。相反,使用的功能,这将返回一个指向字符矢量的第二输入参数。
使用正确的#定义
声明。在S-函数名,你必须指定的S-功能的文件名匹配。S-FUNCTION_NAME
如果可能的话,使用的数据类型real_T
和int_T
代替双
和INT
。数据类型real_T
和int_T
更通用的,可以在多种环境下使用。
与用来构建S-功能的模块的名称提供构建过程。使用模板make文件中,set_param
功能,或S-功能模块
领域S-功能块参数对话框。例如,假设你建立你的S-功能使用此命令:
MEX sfun_main.c sfun_module1.c sfun_module2.c
然后,您可以使用下面的调用set_param
到包括所需的模块:
set_param(sfun_block,“SFunctionModules”,“sfun_module1 sfun_module2”)
当您准备生成代码,迫使代码生成重建的顶级车型。欲了解更多信息,请参阅顶级型号代码的控制再生。
参数noninlined S-功能只能是以下类型:
双精度
在标量,矢量,或2- d矩阵字符
对于参数,你可以提供给S-功能或操作的S-功能,内联您的S-功能,并考虑使用一个类型更多的灵活性mdlRTW
S函数程序。
从MATLAB使用其他功能matrix.h
API或其它MATLAB的API,如mex.h
和数学
,不支持。万博1manbetx如果调用从S函数源文件中不支万博1manbetx持的API,发生编译器错误。有关支持MATLAB API函万博1manbetx数的详细信息,请参阅文件
和matlabroot
/ RTW / C / SRC /rt_matrx.hmatlabroot
/ RTW / C / SRC /rt_matrx.c
如果您使用mxGetPr
在一个空矩阵,该函数不返回空值
。它返回一个随机值。因此,你必须保护的呼吁mxGetPr
通过使用mxIsEmpty
。