主要内容

写Noninlined s函数

非内联s函数是由Simulink相同处理的C或c++ MEX s函数金宝app®引擎和由生成的代码。根据s函数API实现一次算法。Simu金宝applink引擎和生成的代码调用s函数例程(例如,mdlOutputs)在模型执行期间。

非内联s函数是通过缺少sfunction.tlc文件的s函数。文件名根据平台的不同而不同。例如,在64位的微软上®窗户®系统,文件名为sfunctionmexw64.在MATLAB®命令窗口中,键入mexext查看您的系统使用的扩展。

编写非内联s函数指南

  • 墨西哥文件不能调用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-function_name声明。指定的s -函数名必须与s -函数文件名匹配。

  • 如果可能,使用数据类型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 -函数中的操作的参数类型中获得更大的灵活性,请内联s -函数并考虑使用mdlRTW功能程序。

使用MATLAB中的其他函数matrix.hAPI或其他MATLAB API,如mex.h而且mat.h,不支持。金宝app如果从s函数源文件调用不支持金宝app的api,则会发生编译器错误。有关支持的MATLAB API金宝app函数的详细信息,请参见相关文件matlabroot/ rtw / c / src /rt_matrx.h而且matlabroot/ rtw / c / src /rt_matrx.c

如果你使用mxGetPr对于空矩阵,函数不返回.它返回一个随机值。因此,您必须保护呼叫mxGetPr通过使用mxIsEmpty

相关的话题