本页对应的英文页面已更新,但尚未翻译。 若要查看最新内容,请点击此处访问英文页面。

legacy_code

使用 Legacy Code Tool

语法

legacy_code('help')
specs = legacy_code('initialize')
legacy_code('sfcn_cmex_generate', specs)
legacy_code('compile', specs, compilerOptions)
legacy_code('generate_for_sim', specs, modelname)
legacy_code('slblock_generate', specs, modelname)
legacy_code('sfcn_tlc_generate', specs)
legacy_code('sfcn_makecfg_generate', specs)
legacy_code('rtwmakecfg_generate', specs)
legacy_code('backward_compatibility')

说明

legacy_code 函数创建一个 MATLAB® 结构体,用于注册现有 C 或 C++ 代码的规范以及正在生成的 S-Function。此外,该函数还可以为指定的 S-Function 生成、编译并链接以及创建封装模块。其他选项包括生成

  • TLC 文件,用于在 Accelerator 模式下或代码生成中进行仿真

  • rtwmakecfg.m 文件,您可以通过自定义该文件,指定与生成的 S-Function 不在同一目录中的相关源和头文件

legacy_code('help') 显示 Legacy Code Tool 的使用说明。

specs = legacy_code('initialize') 初始化 Legacy Code Tool 数据结构体 specs,它用于注册现有 C 或 C++ 代码的特征以及 Legacy Code Tool 生成的 S-Function 的属性。

legacy_code('sfcn_cmex_generate', specs) 生成由 Legacy Code Tool 数据结构体 specs 指定的 S-Function 源文件。

legacy_code('compile', specs, compilerOptions) 编译并链接由 Legacy Code Tool 根据数据结构体 specs 以及您可能指定的编译器选项生成的 S-Function。这些编译器选项必须受 mex (MATLAB) 函数支持。

legacy_code('generate_for_sim', specs, modelname) 通过一个步骤生成、编译并链接 S-Function。如果 Legacy Code Tool 数据结构体的 Options.useTlcWithAccel 字段设置为逻辑值 1 (true),该函数还会生成 TLC 文件用于加速仿真。

legacy_code('slblock_generate', specs, modelname) 为 Legacy Code Tool 根据数据结构体 specs 生成的 S-Function 生成封装的 S-Function 模块。该模块将出现在由 modelname 指定的 Simulink® 模型中。如果您忽略 modelname,该模块将出现在空模型编辑器窗口中。

legacy_code('sfcn_tlc_generate', specs) 为 Legacy Code Tool 根据数据结构体 specs 生成的 S-Function 生成 TLC 文件。此选项在您想执行以下操作时才有意义:

legacy_code('sfcn_makecfg_generate', specs) 为 Legacy Code Tool 根据数据结构体 specs 生成的 S-Function 生成 sFunction_makecfg.m 文件。仅当使用 Simulink Coder 软件从 Simulink 模型中生成代码时,此选项才有意义。有关详细信息,请参阅Use makecfg to Customize Generated Makefiles for S-Functions (Simulink Coder)和使用 Legacy Code Tool 在生成的代码中导入对外部代码的调用 (Simulink Coder)。

legacy_code('rtwmakecfg_generate', specs) 为 Legacy Code Tool 根据数据结构体 specs 生成的 S-Function 生成 rtwmakecfg.m 文件。仅当使用 Simulink Coder 软件从 Simulink 模型中生成代码时,此选项才有意义。有关详细信息,请参阅Use rtwmakecfg.m API to Customize Generated Makefiles (Simulink Coder)和使用 Legacy Code Tool 在生成的代码中导入对外部代码的调用 (Simulink Coder)。

legacy_code('backward_compatibility') 自动将使用 Legacy Code Tool 的语法更新为此参考页以及Integrate C Functions Using Legacy Code Tool中介绍的支持的语法。

输入参数

specs

包含以下字段的结构体:

S-Function 命名

SFunctionName(必填)- 字符向量,指定要由 Legacy Code Tool 生成的 S-Function 的名称。

定义 Legacy Code Tool 函数规范

  • InitializeConditionsFcnSpec - 非空字符向量,指定 S-Function 为了初始化和重置状态而调用的函数。必须使用 Simulink 软件能够解释的标记声明此函数,如Declaring Legacy Code Tool Function Specifications中所述。

  • OutputFcnSpec - 非空字符向量,指定 S-Function 在每个时间步中调用的函数。必须使用 Simulink 软件能够解释的标记声明此函数,如Declaring Legacy Code Tool Function Specifications中所述。

  • StartFcnSpec - 字符向量,指定 S-Function 在开始执行时调用的函数。此函数可以访问 S-Function 参数以及工作数据。必须使用 Simulink 软件能够解释的标记声明此函数,如Declaring Legacy Code Tool Function Specifications中所述。

  • TerminateFcnSpec - 字符向量,指定 S-Function 停止执行时调用的函数。此函数可以访问 S-Function 参数以及工作数据。必须使用 Simulink 软件能够解释的标记声明此函数,如Declaring Legacy Code Tool Function Specifications中所述。

定义编译资源

  • HeaderFiles - 字符向量元胞数组,指定编译所需的头文件的文件名。

  • SourceFiles - 字符向量元胞数组,指定编译所需的源文件。您可以使用绝对或相对路径名称来指定源文件。

  • HostLibFiles - 字符向量元胞数组,指定主机编译所需的库文件。您可以使用绝对或相对路径名称来指定库文件。

  • TargetLibFiles - 字符向量元胞数组,指定目标(即独立)编译所需的库文件。您可以使用绝对或相对路径名称来指定库文件。

  • IncPaths - 字符向量元胞数组,指定包含头文件的目录。您可以使用绝对或相对路径名称来指定目录。

  • SrcPaths - 字符向量元胞数组,指定包含源文件的目录。您可以使用绝对或相对路径名称来指定目录。

  • LibPaths - 字符向量元胞数组,指定包含主机和目标库文件的目录。您可以使用绝对或相对路径名称来指定目录。

指定采样时间

SampleTime - 以下项之一:

  • 'inherited'(默认值)- 从源模块继承采样时间。

  • 'parameterized' - 采样时间表示为可调参数。生成的代码可以通过调用 MEX API 函数(如 mxGetPrmxGetData)来访问该参数。

  • 固定 - 您显式指定的采样时间。有关如何指定采样时间的信息,请参阅指定采样时间

如果您指定此字段,必须最后指定它。

定义 S-Function 选项

Options - 结构体,用于控制 S-Function 选项。结构体的字段包括:

  • isMacro - 逻辑值,指定旧代码是否为 C 宏。默认情况下,值为 false (0)。

  • isVolatile - 逻辑值,指定 S-Function SS_OPTION_NONVOLATILE 选项的设置。默认情况下,值为 true (1)。

  • canBeCalledConditionally - 逻辑值,指定 S-Function SS_OPTION_CAN_BE_CALLED_CONDITIONALLY 选项的设置。默认情况下,值为 true (1)。

  • useTlcWithAccel - 逻辑值,指定 S-Function SS_OPTION_USE_TLC_WITH_ACCELERATOR 选项的设置。默认情况下,值为 true (1)。

  • language - 字符向量,指定 'C''C++' 作为 Legacy Code Tool 将要生成的 S-Function 的目标语言。默认情况下,值为 'C'

    注意

    Legacy Code Tool 可与 C++ 函数对接,但不能与 C++ 对象对接。有关解决方法,请参阅 Simulink 文档中的Legacy Code Tool Limitations

  • singleCPPMexFile - 逻辑值,如果为 true,则指定生成的代码:

    • 要求您将内联 S-Function 仅生成为一个文件 (.cpp) 并进行管理,而不是两个文件(.c.tlc)。

    • 按照模型配置参数指定的方式维护模型代码风格(一般表达式中和 if 语句中的条件表达式中括号级别的用法和操作数顺序的保持)。

    默认情况下,值为 false

    限制

    在下列情况下,不能将 singleCPPMexFile 字段设置为 true

    • Options.language='C++'

    • 您使用以下 Simulink 对象之一并将 IsAlias 属性设置为 true

      • Simulink.Bus

      • Simulink.AliasType

      • Simulink.NumericType

    • Legacy Code Tool 函数规范中包含 void*void**,以表示状态参数的标量工作数据

    • Legacy Code Tool 结构体的 HeaderFiles 字段指定多个头文件

  • supportsMultipleExecInstances - 逻辑值,指定是否包括对 ssSupportsMultipleExecInstances 函数的调用。默认情况下,值为 false (0)。

  • convertNDArrayToRowMajor - 逻辑值,指定在列优先格式和行优先格式之间自动转换矩阵。列优先格式由 MATLAB、Simulink 和生成的代码使用。行优先格式由 C 使用。默认情况下,值为 false (0)。如果您当前指定该选项的旧版本 convert2DMatrixToRowMajor,函数将自动指定选项的新版本 convertNDArrayToRowMajor

    注意

    此选项不支持复数数据的二维矩阵。

  • supportCoverage - 逻辑值,指定生成的 S-Function 是否必须与 Model Coverage 兼容。默认情况下,值为 false (0)。

  • supportCoverageAndDesignVerifier - 逻辑值,指定生成的 S-Function 是否必须与 Model Coverage 和 Simulink Design Verifier™ 兼容。默认情况下,值为 false (0)。

  • outputsConditionallyWritten - 逻辑值,指定旧代码是否有条件地写入输出端口。如果为 true,生成的 S-Function 指定与每个输出端口关联的内存无法覆盖并且是全局性的 (SS_NOT_REUSABLE_AND_GLOBAL)。如果为 false,则与每个输出端口关联的内存可重用并且是局部性的 (SS_REUSABLE_AND_LOCAL)。默认情况下,值为 false (0)。有关详细信息,请参阅 ssSetOutputPortOptimOpts

modelname

Simulink 模型的名称,Legacy Code Tool 要在该模型中插入您使用操作字符向量 'slblock_generate' 指定 legacy_code 时生成的封装 S-Function 模块。如果您省略此参数,模块将出现在空模型编辑器窗口中。

在 R2006b 中推出