非内联s函数是由Simulink相同处理的C或c++ MEX s函数金宝app®引擎和由生成的代码。根据s函数API实现一次算法。Simu金宝applink引擎和生成的代码调用s函数例程(例如,mdlOutputs
)在模型执行期间。
非内联s函数是通过缺少
文件的s函数。文件名根据平台的不同而不同。例如,在64位的微软上®窗户®系统,文件名为sfunction
.tlc
.在MATLAB®命令窗口中,键入sfunction
.mexw64
mexext
查看您的系统使用的扩展。
墨西哥文件不能调用MATLAB函数。
如果mex文件使用MATLAB外部接口库中的函数,则包括头文件cg_sfun.h
而不是mex.h
或金宝appsimulink.c
.对于头文件cg_sfun.h
,在你的s函数的末尾,包括这些行:
#ifdef MATLAB_MEX_FILE /*这个文件被编译为墨西哥文件吗?*/ #include "金宝appsimulink.c" /* *墨西哥文件接口机制*/ #else #include "cg_sfun.h" /*代码生成注册函数*/ #endif .c
只使用代码生成器支持的MATLAB API函数。金宝app支持的A金宝appPI函数有:
mxGetEps
mxGetInf
mxGetM
mxGetN
mxGetNaN
mxGetPr
mxGetScalar
mxGetString
mxIsEmpty
mxIsFinite
mxIsInf
生成的代码中不支持MEX库调用。金宝app要在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函数:
Mex sfun_main.c sfun_module1.c sfun_module2.c
然后,您可以使用以下调用set_param
要包含所需的模块:
set_param (sfun_block“SFunctionModules”,“sfun_module1 sfun_module2”)
当您准备好生成代码时,强制代码生成器重新构建顶级模型。有关更多信息,请参见顶级模型代码的控制再生.
非内联s函数的参数只能是以下类型:
双精度
标量、向量或二维矩阵中的字符
要想在可以提供给s -函数或s -函数中的操作的参数类型中获得更大的灵活性,请内联s -函数并考虑使用mdlRTW
功能程序。
使用MATLAB中的其他函数matrix.h
API或其他MATLAB API,如mex.h
而且mat.h
,不支持。金宝app如果从s函数源文件调用不支持金宝app的api,则会发生编译器错误。有关支持的MATLAB API金宝app函数的详细信息,请参见相关文件
而且matlabroot
/ rtw / c / src /rt_matrx.hmatlabroot
/ rtw / c / src /rt_matrx.c
如果你使用mxGetPr
对于空矩阵,函数不返回零
.它返回一个随机值。因此,您必须保护呼叫mxGetPr
通过使用mxIsEmpty
.