写Noninlined S-功能

甲noninlined S-功能是受Simulink的相同处理的C或C ++ MEX S函数万博1manbetx®发动机,并通过生成的代码。你实现你的算法根据S函数API一次。Simu万博1manbetxlink的引擎和生成的代码调用S函数例程(例如,mdlOutputs)模型执行期间。

Noninlined S-功能由不存在所识别的sfunction.tlc文件为您的S-功能。文件名称取决于您的平台。例如,在64位Microsoft®视窗®系统,文件名是sfunctionmexw64。在MATLAB®命令行窗口,键入mexext看到你的系统使用的扩展。

写作Noninlined S-功能指南

  • 该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-FUNCTION_NAME声明。在S-函数名,你必须指定的S-功能的文件名匹配。

  • 如果可能的话,使用的数据类型real_Tint_T代替INT。数据类型real_Tint_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函数参数类型的限制

参数noninlined S-功能只能是以下类型:

  • 双精度

  • 在标量,矢量,或2- d矩阵字符

对于参数,你可以提供给S-功能或操作的S-功能,内联您的S-功能,并考虑使用一个类型更多的灵活性mdlRTWS函数程序。

从MATLAB使用其他功能matrix.hAPI或其它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

相关话题