主要内容

遗留代码工具示例

你可以使用Simulink金宝app®遗留代码工具,为遗留或自定义代码生成完全内联的C MEX s函数。s函数针对嵌入式组件(如设备驱动程序和查找表)进行了优化,它们调用现有的C或c++函数。这些示例展示了如何使用遗留代码工具集成各种外部功能。

集成外部C函数,通过值和地址传递输入参数

这个例子展示了如何使用遗留代码工具集成遗留C函数,这些函数通过值而不是地址来传递输入参数。

使用遗留代码工具,您可以:

  • 提供遗留功能规范。

  • 生成在模拟期间调用遗留代码的C-MEX s函数。

  • 编译并构建生成的s函数进行仿真。

  • 生成一个TLC块文件和可选的rtwmakecfg。M文件,该文件指定为模型生成的代码如何调用遗留代码。

提供遗留功能规范

遗留代码工具函数以特定的数据结构或结构数组作为参数。您可以通过使用'initialize'作为第一个输入调用函数legacy_code()来初始化数据结构。在初始化结构之后,将其属性分配给与正在集成的遗留代码相对应的值。本例中调用的遗留函数的原型是:

  • FLT filterV1(const FLT signal, const FLT prevSignal, const FLT gain)

  • FLT filterV2(const FLT* signal, const FLT prevSignal, const FLT gain)

FLT是float的类型定义。遗留源代码在文件中your_types.hmyfilter.hfilterV1.c,filterV2.c

请注意两个结构中定义的OutputFcnSpec的差异;第一种情况指定第一个输入参数按值传递,而第二种情况指定按指针传递。

Defs = [];% rtwdemo_sfun_filterV1Def = legacy_code(“初始化”);def.SFunctionName =“rtwdemo_sfun_filterV1”;def.OutputFcnSpec ='单个y1 = filterV1(单个u1,单个u2,单个p1)';def.HeaderFiles = {“myfilter.h”};def.SourceFiles = {“filterV1.c”};def.IncPaths = {“rtwdemo_lct_src”};def.SrcPaths = {“rtwdemo_lct_src”};Defs = [Defs;def);% rtwdemo_sfun_filterV2Def = legacy_code(“初始化”);def.SFunctionName =“rtwdemo_sfun_filterV2”;def.OutputFcnSpec ='单个y1 = filterV2(单个u1[1],单个u2,单个p1)';def.HeaderFiles = {“myfilter.h”};def.SourceFiles = {“filterV2.c”};def.IncPaths = {“rtwdemo_lct_src”};def.SrcPaths = {“rtwdemo_lct_src”};Defs = [Defs;def);

为模拟生成s函数

要根据输入参数'defs'提供的描述生成C-MEX s -函数,请再次调用函数legacy_code(),并将第一个输入设置为'sfcn_cmex_generate'。s函数在模拟中调用遗留函数。s -函数的源代码在文件中rtwdemo_sfun_filterV1.c而且rtwdemo_sfun_filterV2.c

legacy_code (“sfcn_cmex_generate”def);

编译生成的s -函数用于仿真

生成C-MEX s -函数源文件后,要编译s -函数以使用Simulink®进行模拟,请再次调用函数legacy_code(),并将第一个输入设置为“compile”。金宝app

legacy_code (“编译”def);
###开始编译rtwdemo_sfun_filterV1 mex('-I/mathworks/devel/bat/Bdoc23a/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/Bdoc23a_2213998_2750957/tpbe8bb089/simulinkcode 金宝app-ex19632214', '-c', '-outdir', '/tmp/Bdoc23a_2213998_2750957/tpdc2b8342_c658_440e_b755_a1456f7f7dc3', '/mathworks/devel/bat/Bdoc23a/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src/filterV1.c')使用'gcc'构建。MEX完成成功。mex('rtwdemo_sfun_filterV1.c', '-I/mathworks/devel/bat/Bdoc23a/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/Bdoc23a_2213998_2750957/tpbe8bb089/金宝appsimulinkcode -ex19632214', '/tmp/Bdoc23a_2213998_2750957/tpdc2b8342_c658_440e_b755_a1456f7f7dc3/filterV1.o')使用'gcc'构建。MEX完成成功。开始编译rtwdemo_sfun_filterV2 mex('-I/mathworks/devel/bat/Bdoc23a/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/Bdoc23a_2213998_2750957/tpbe8bb089/simulinkcode -ex19632214', '-c', '-outdir', '/tmp/Bdoc23a_2213998_27金宝app50957/tp0b604fdc_b785_45c3_ae65_06c476914370', '/mathworks/devel/bat/Bdoc23a/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src/filterV2.c')使用'gcc'构建。MEX完成成功。mex('rtwdemo_sfun_filterV2.c', '-I/mathworks/devel/bat/Bdoc23a/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/Bdoc23a_2213998_2750957/tpbe8bb089/金宝appsimulinkcode -ex19632214', '/tmp/Bdoc23a_2213998_2750957/tp0b604fdc_b785_45c3_ae65_06c476914370/filterV2.o')使用'gcc'构建。MEX完成成功。完成rtwdemo_sfun_filterV2的编译

为代码生成生成TLC块文件

在编译s -函数并在模拟中使用它们之后,可以再次调用函数legacy_code(),并将第一个输入设置为'sfcn_tlc_generate'以生成TLC块文件。块文件指定为模型生成的代码如何调用遗留代码。如果不生成TLC块文件,并且尝试为包含s -函数的模型生成代码,则代码生成失败。s -函数的TLC块文件为rtwdemo_sfun_filterV1.tlc而且rtwdemo_sfun_filterV2.tlc

legacy_code (“sfcn_tlc_generate”def);

生成rtwmakecfg。m文件代码生成

创建TLC块文件后,可以再次调用函数legacy_code(),将第一个输入设置为'rtwmakecfg_generate'以生成rtwmakecfg。M文件支持代码生成。金宝app如果s -函数所需的源文件和头文件与s -函数不在同一个文件夹中,并且希望在代码生成期间生成的makefile中添加这些依赖项,则生成rtwmakecfg。m文件。

legacy_code (“rtwmakecfg_generate”def);

生成屏蔽s函数块,用于调用生成的s函数

编译C-MEX s -函数源代码后,可以再次调用函数legacy_code(),并将第一个输入设置为'slblock_generate',以生成调用s -函数的屏蔽s -函数块。软件将积木放入一个新的模型中。从那里,您可以将它们复制到现有的模型中。

legacy_code (“slblock_generate”def);

显示与遗留代码生成的集成

该模型rtwdemo_lct_filter显示模型与遗留代码的集成。子系统TestFilter作为通过generate s函数调用遗留C函数的工具,使用单元延迟存储以前的输出值。

open_system (“rtwdemo_lct_filter”) open_system (“rtwdemo_lct_filter / TestFilter”) sim卡(“rtwdemo_lct_filter”

集成外部C函数,将输出参数作为返回参数传递

这个例子展示了如何使用遗留代码工具集成遗留C函数,这些函数将输出作为返回参数传递。

使用遗留代码工具,您可以:

  • 提供遗留功能规范。

  • 生成在模拟期间调用遗留代码的C-MEX s函数。

  • 编译并构建生成的s函数进行仿真。

  • 生成一个TLC块文件和可选的rtwmakecfg。M文件,该文件指定为模型生成的代码如何调用遗留代码。

提供遗留功能规范

遗留代码工具函数以特定的数据结构或结构数组作为参数。您可以通过使用'initialize'作为第一个输入调用函数legacy_code()来初始化数据结构。在初始化结构之后,将其属性分配给与正在集成的遗留代码相对应的值。在这个例子中被调用的遗留函数的原型是:

FLT增益标量(const FLT in, const FLT增益)

FLT是float的类型定义。遗留源代码在文件中your_types.hgain.h,gainScalar.c

% rtwdemo_sfun_gain_scalarDef = legacy_code(“初始化”);def.SFunctionName =“rtwdemo_sfun_gain_scalar”;def.OutputFcnSpec ='single y1 = gainScalar(single u1, single p1)';def.HeaderFiles = {“gain.h”};def.SourceFiles = {“gainScalar.c”};def.IncPaths = {“rtwdemo_lct_src”};def.SrcPaths = {“rtwdemo_lct_src”};

生成用于仿真的s函数

要根据输入参数'def'提供的描述生成C-MEX s函数,请再次调用函数legacy_code(),并将第一个输入设置为'sfcn_cmex_generate'。s函数在模拟过程中调用遗留函数。s函数的源代码在文件中rtwdemo_sfun_gain_scalar.c

legacy_code (“sfcn_cmex_generate”def);

编译生成的s函数进行仿真

生成C-MEX S-function源文件后,要编译S-function以使用Simulink®进行模拟,请再次调用函数legacy_code(),并将第一个输入设置为'compile'。金宝app

legacy_code (“编译”def);
###开始编译rtwdemo_sfun_gain_scalar mex('-I/mathworks/devel/bat/Bdoc23a/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/Bdoc23a_2213998_2750957/tpbe8bb089/simulinkcode 金宝app-ex09148220', '-c', '-outdir', '/tmp/Bdoc23a_2213998_2750957/tp99aea3df_b231_4354_b465_5a588d90d229', '/mathworks/devel/bat/Bdoc23a/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src/ gainscala .c')使用'gcc'构建。MEX完成成功。mex('rtwdemo_sfun_gain_scala .c', '-I/mathworks/devel/bat/Bdoc23a/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/Bdoc23a_2213998_2750957/tpbe8bb089/金宝appsimulinkcode -ex09148220', '/tmp/Bdoc23a_2213998_2750957/tp99aea3df_b231_4354_b465_5a588d90d229/ gainscala .o')使用'gcc'构建。MEX完成成功。完成rtwdemo_sfun_gain_scalar的编译

为代码生成生成一个TLC块文件

在编译s函数并在模拟中使用它之后,您可以再次调用函数legacy_code(),并将第一个输入设置为'sfcn_tlc_generate'以生成TLC块文件。块文件指定为模型生成的代码如何调用遗留代码。如果您没有生成TLC块文件,并且尝试为包含s函数的模型生成代码,则代码生成将失败。s函数的TLC块文件为:rtwdemo_sfun_gain_scalar.tlc

legacy_code (“sfcn_tlc_generate”def);

生成rtwmakecfg。m文件代码生成

创建TLC块文件后,可以再次调用函数legacy_code(),将第一个输入设置为'rtwmakecfg_generate'以生成rtwmakecfg。M文件支持代码生成。金宝app如果s -函数所需的源文件和头文件与s -函数不在同一个文件夹中,并且希望在代码生成期间生成的makefile中添加这些依赖项,则生成rtwmakecfg。m文件。

legacy_code (“rtwmakecfg_generate”def);

生成屏蔽s函数块,用于调用生成的s函数

编译C-MEX s -函数源代码后,可以再次调用函数legacy_code(),并将第一个输入设置为'slblock_generate',以生成调用该s -函数的屏蔽s -函数块。软件将块放入一个新的模型中。从那里,您可以将它复制到一个现有的模型。

legacy_code (“slblock_generate”def);

显示与遗留代码生成的集成

该模型rtwdemo_lct_gain显示模型与遗留代码的集成。子系统TestGain充当了通过生成s函数调用遗留C函数的工具。

open_system (“rtwdemo_lct_gain”) open_system (“rtwdemo_lct_gain / TestGain”) sim卡(“rtwdemo_lct_gain”

集成外部c++对象方法

使用遗留代码工具集成遗留c++对象方法。

使用遗留代码工具,您可以:

  • 提供遗留功能规范。

  • 生成c++ MEX s函数,在模拟期间调用遗留代码。

  • 编译并构建生成的s函数进行仿真。

  • 生成一个块TLC文件和可选的rtwmakecfg。M文件,在代码生成期间调用遗留代码。

提供遗留功能规范

遗留代码工具提供的函数以特定的数据结构或结构数组作为参数。通过使用'initialize'作为第一个输入调用函数legacy_code()来初始化数据结构。在初始化结构之后,将其属性分配给与正在集成的遗留代码相对应的值。本例中遗留c++类的定义是:

类加法器{private: int int_state;公众:加法器();Int add_one(Int increment);int get_val ();};

遗留源代码在文件中adder_cpp.h而且adder_cpp.cpp

% rtwdemo_sfun_adder_cppDef = legacy_code(“初始化”);def.SFunctionName =“rtwdemo_sfun_adder_cpp”;def.StartFcnSpec =“createAdder()”;def.OutputFcnSpec ='int32 y1 = adderOutput(int32 u1)';def.TerminateFcnSpec =“deleteAdder()”;def.HeaderFiles = {“adder_cpp.h”};def.SourceFiles = {“adder_cpp.cpp”};def.IncPaths = {“rtwdemo_lct_src”};def.SrcPaths = {“rtwdemo_lct_src”};def.Options.language =“c++”;def.Options.useTlcWithAccel = false;

生成用于仿真的s函数

要根据输入参数'def'提供的描述生成C-MEX s函数,请再次调用函数legacy_code(),并将第一个输入设置为'sfcn_cmex_generate'。s函数在模拟过程中调用遗留函数。s函数的源代码在文件中rtwdemo_sfun_adder_cpp.cpp

legacy_code (“sfcn_cmex_generate”def);

编译生成的s函数进行仿真

生成C-MEX S-function源文件后,要编译S-function以使用Simulink®进行模拟,请再次调用函数legacy_code(),并将第一个输入设置为'compile'。金宝app

legacy_code (“编译”def);
###开始编译rtwdemo_sfun_adder_cpp mex('-I/mathworks/devel/bat/Bdoc23a/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/Bdoc23a_2213998_2805165/tpec3d71bb/simulinkcode 金宝app-ex06428671', '-c', '-outdir', '/tmp/Bdoc23a_2213998_2805165/tp6008122a_3c3a_44e9_a9f2_924bc27584e1', '/mathworks/devel/bat/Bdoc23a/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src/ adder_cppp .cpp')使用'g++'构建。MEX完成成功。mex(' rtwdemo_sfun_adder_cpp_cpp ', '-I/mathworks/devel/bat/Bdoc23a/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/Bdoc23a_2213998_2805165/tpec3d71b金宝appb/simulinkcode -ex06428671', '-cxx', '/tmp/Bdoc23a_2213998_2805165/tp6008122a_3c3a_44e9_a9f2_924bc27584e1/ adder_cpp_o ')使用'g++'构建。MEX完成成功。完成rtwdemo_sfun_adder_cpp的编译

为代码生成生成一个TLC块文件

编译s函数并在模拟中使用它之后,可以再次调用函数legacy_code()。将第一个输入设置为'sfcn_tlc_generate'以生成支持通过Simulink®Coder™进行代码生成的TLC块文件。金宝app金宝app如果没有创建TLC块文件,并且您试图为包含s函数的模型生成代码,则代码生成将失败。s函数的TLC块文件为:rtwdemo_sfun_adder_cpp.tlc

legacy_code (“sfcn_tlc_generate”def);

生成rtwmakecfg。m文件代码生成

创建TLC块文件后,可以再次调用函数legacy_code()。将第一个输入设置为'rtwmakecfg_generate'以生成rtwmakecfg。m文件,支持通过Simu金宝applink®Coder™进行代码生成。金宝app如果s -函数所需的源文件和头文件与s -函数不在同一个文件夹中,并且希望在代码生成期间生成的makefile中添加这些依赖项,则生成rtwmakecfg。m文件。

legacy_code (“rtwmakecfg_generate”def);

生成屏蔽s函数块,用于调用生成的s函数

编译C-MEX s -函数源代码后,可以再次调用函数legacy_code()。将第一个输入设置为'slblock_generate'以生成一个被配置为调用该s函数的屏蔽s函数块。软件将块放入一个新的模型中。您可以将该块复制到现有模型中。

% legacy_code('slblock_generate', def);

显示与遗留代码生成的集成

该模型rtwdemo_lct_cpp显示与遗留代码的集成。

open_system (“rtwdemo_lct_cpp”) sim卡(“rtwdemo_lct_cpp”

集成将输入和输出参数作为参数传递给定点数据类型的外部C函数

通过使用遗留代码工具(legacy Code Tool)的定点数据类型参数来集成传递输入和输出的遗留C函数。

使用遗留代码工具,您可以:

  • 提供遗留功能规范。

  • 生成在模拟期间调用遗留代码的C-MEX s函数。

  • 编译并构建生成的s函数进行仿真。

  • 生成一个TLC块文件和可选的rtwmakecfg。M文件,该文件指定为模型生成的代码如何调用遗留代码。

提供遗留功能规范

遗留代码工具函数以特定的数据结构或结构数组作为参数。您可以通过使用'initialize'作为第一个输入调用函数legacy_code()来初始化数据结构。在初始化结构之后,将其属性分配给与正在集成的遗留代码相对应的值。在这个例子中被调用的遗留函数的原型是:

(const myFixpt in1, const myFixpt in2, const uint8_T fracLength)

myFixpt在逻辑上是一个定点数据类型,它在物理上是一个16位整数的类型定义:

myFixpt = 金宝appSimulink.NumericType;myFixpt。DataTypeMode =“定点:二进制点缩放”;myFixpt。Signed = true;myFixpt。WordLength = 16;myFixpt。FractionLength = 10;myFixpt。IsAlias = true;myFixpt。HeaderFile =“timesFixpt.h”

遗留源代码在文件中timesFixpt.h,timesS16.c

% rtwdemo_sfun_gain_fixptDef = legacy_code(“初始化”);def.SFunctionName =“rtwdemo_sfun_gain_fixpt”;def.OutputFcnSpec ='myFixpt y1 = timesS16(myFixpt u1, myFixpt p1, uint8 p2)';def.HeaderFiles = {“timesFixpt.h”};def.SourceFiles = {“timesS16.c”};def.IncPaths = {“rtwdemo_lct_src”};def.SrcPaths = {“rtwdemo_lct_src”};

生成用于仿真的s函数

要根据输入参数'def'提供的描述生成C-MEX s函数,请再次调用函数legacy_code(),并将第一个输入设置为'sfcn_cmex_generate'。s函数在模拟过程中调用遗留函数。s函数的源代码在文件中rtwdemo_sfun_gain_fixpt.c

legacy_code (“sfcn_cmex_generate”def);

编译生成的s函数进行仿真

生成C-MEX S-function源文件后,要编译S-function以使用Simulink®进行模拟,请再次调用函数legacy_code(),并将第一个输入设置为'compile'。金宝app

legacy_code (“编译”def);
###开始编译rtwdemo_sfun_gain_fixpt mex('-I/mathworks/devel/bat/Bdoc23a/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/Bdoc23a_2213998_2750957/tpbe8bb089/simulinkcode 金宝app-ex05928773', '-c', '-outdir', '/tmp/Bdoc23a_2213998_2750957/tpe390279f_3f34_4a5c_b9a8_7d06358b0c5b', '/mathworks/devel/bat/Bdoc23a/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src/timesS16.c')使用'gcc'构建。MEX完成成功。mex('rtwdemo_sfun_gain_fixpt.c', '-I/mathworks/devel/bat/Bdoc23a/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/Bdoc23a_2213998_2750957/tpbe8bb089/金宝appsimulinkcode -ex05928773', '/tmp/Bdoc23a_2213998_2750957/tpe390279f_3f34_4a5c_b9a8_7d06358b0c5b/timesS16.o')使用'gcc'构建。MEX完成成功。完成rtwdemo_sfun_gain_fixpt的编译

为代码生成生成一个TLC块文件

编译s函数并在模拟中使用它之后,可以再次调用函数legacy_code()。将第一个输入设置为“sfcn_tlc_generate”以生成一个TLC块文件。块文件指定为模型生成的代码如何调用遗留代码。如果您没有生成TLC块文件,并且尝试为包含s函数的模型生成代码,则代码生成将失败。s函数的TLC块文件为:rtwdemo_sfun_gain_fixpt.tlc

legacy_code (“sfcn_tlc_generate”def);

生成rtwmakecfg。m文件代码生成

创建TLC块文件后,可以再次调用函数legacy_code()。将第一个输入设置为'rtwmakecfg_generate'以生成rtwmakecfg。M文件,支持代码生成。金宝app如果s -函数所需的源文件和头文件与s -函数不在同一个文件夹中,并且希望在代码生成期间生成的makefile中添加这些依赖项,则生成rtwmakecfg。m文件。

legacy_code (“rtwmakecfg_generate”def);

生成屏蔽s函数块,用于调用生成的s函数

编译C-MEX s -函数源代码后,可以再次调用函数legacy_code()。将第一个输入设置为'slblock_generate',以生成一个屏蔽的s函数块,调用该s函数。软件将块放入一个新的模型中。您可以将该块复制到现有模型中。

legacy_code (“slblock_generate”def);

显示与遗留代码生成的集成

该模型rtwdemo_lct_fixpt_params显示模型与遗留代码的集成。子系统TestFixpt充当了通过生成的s函数调用遗留C函数的工具。

open_system (“rtwdemo_lct_fixpt_params”) open_system (“rtwdemo_lct_fixpt_params / TestFixpt”) sim卡(“rtwdemo_lct_fixpt_params”

集成将输入和输出参数作为信号传递给定点数据类型的外部C函数

这个示例展示了如何使用遗留代码工具集成遗留C函数,这些函数通过使用定点数据类型的参数传递输入和输出。

使用遗留代码工具,您可以:

  • 提供遗留功能规范。

  • 生成在模拟期间调用遗留代码的C-MEX s函数。

  • 编译并构建生成的s函数进行仿真。

  • 生成一个TLC块文件和可选的rtwmakecfg。M文件,该文件指定为模型生成的代码如何调用遗留代码。

提供遗留功能规范

遗留代码工具函数以特定的数据结构或结构数组作为参数。您可以通过使用'initialize'作为第一个输入调用函数legacy_code()来初始化数据结构。在初始化结构之后,将其属性分配给与正在集成的遗留代码相对应的值。在这个例子中被调用的遗留函数的原型是:

(const myFixpt in1, const myFixpt in2, const uint8_T fracLength)

myFixpt在逻辑上是一个定点数据类型,它在物理上是一个16位整数的类型定义:

myFixpt = 金宝appSimulink.NumericType;myFixpt。DataTypeMode =“定点:二进制点缩放”;myFixpt。Signed = true;myFixpt。WordLength = 16;myFixpt。FractionLength = 10;myFixpt。IsAlias = true;myFixpt。HeaderFile =“timesFixpt.h”

遗留源代码在文件中timesFixpt.h,timesS16.c

% rtwdemo_sfun_times_s16Def = legacy_code(“初始化”);def.SFunctionName =“rtwdemo_sfun_times_s16”;def.OutputFcnSpec ='myFixpt y1 = timesS16(myFixpt u1, myFixpt u2, uint8 p1)';def.HeaderFiles = {“timesFixpt.h”};def.SourceFiles = {“timesS16.c”};def.IncPaths = {“rtwdemo_lct_src”};def.SrcPaths = {“rtwdemo_lct_src”};

生成用于仿真的s函数

要根据输入参数'def'提供的描述生成C-MEX s函数,请再次调用函数legacy_code(),并将第一个输入设置为'sfcn_cmex_generate'。s函数在模拟过程中调用遗留函数。s函数的源代码在文件中rtwdemo_sfun_times_s16.c

legacy_code (“sfcn_cmex_generate”def);

编译生成的s函数进行仿真

生成C-MEX S-function源文件后,要编译S-function以使用Simulink®进行模拟,请再次调用函数legacy_code(),并将第一个输入设置为'compile'。金宝app

legacy_code (“编译”def);
###开始编译rtwdemo_sfun_times_s16 mex('-I/mathworks/devel/bat/Bdoc23a/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/Bdoc23a_2213998_2750957/tpbe8bb089/simulinkcode 金宝app-ex96454812', '-c', '-outdir', '/tmp/Bdoc23a_2213998_2750957/tpf0af9d0e_65cc_4f0f_b453_a26c0680637e', '/mathworks/devel/bat/Bdoc23a/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src/timesS16.c')使用'gcc'构建。MEX完成成功。mex('rtwdemo_sfun_times_s16.c', '-I/mathworks/devel/bat/Bdoc23a/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/Bdoc23a_2213998_2750957/tpbe8bb089/金宝appsimulinkcode -ex96454812', '/tmp/Bdoc23a_2213998_2750957/tpf0af9d0e_65cc_4f0f_b453_a26c0680637e/timesS16.o')使用'gcc'构建。MEX完成成功。完成rtwdemo_sfun_times_s16的编译

为代码生成生成一个TLC块文件

在编译s函数并在模拟中使用它之后,您可以再次调用函数legacy_code(),并将第一个输入设置为'sfcn_tlc_generate'以生成TLC块文件。块文件指定为模型生成的代码如何调用遗留代码。如果您没有生成TLC块文件,并且尝试为包含s函数的模型生成代码,则代码生成将失败。s函数的TLC块文件为:rtwdemo_sfun_times_s16.tlc

legacy_code (“sfcn_tlc_generate”def);

生成rtwmakecfg。m文件代码生成

创建TLC块文件后,可以再次调用函数legacy_code(),将第一个输入设置为'rtwmakecfg_generate'以生成rtwmakecfg。M文件支持代码生成。金宝app如果s -函数所需的源文件和头文件与s -函数不在同一个文件夹中,并且希望在代码生成期间生成的makefile中添加这些依赖项,则生成rtwmakecfg。m文件。

legacy_code (“rtwmakecfg_generate”def);

生成屏蔽s函数块,用于调用生成的s函数

编译C-MEX s -函数源代码后,可以再次调用函数legacy_code(),并将第一个输入设置为'slblock_generate',以生成调用该s -函数的屏蔽s -函数块。软件将块放入一个新的模型中。从那里,您可以将它复制到一个现有的模型。

legacy_code (“slblock_generate”def);

展示模型与遗留代码的集成

该模型rtwdemo_lct_fixpt_signals显示模型与遗留代码的集成。子系统TestFixpt充当了通过生成的s函数调用遗留C函数的工具。

open_system (“rtwdemo_lct_fixpt_signals”) open_system (“rtwdemo_lct_fixpt_signals / TestFixpt”) sim卡(“rtwdemo_lct_fixpt_signals”

集成外部C函数与实例特定的持久内存

通过使用遗留代码工具集成使用特定于实例的持久内存的遗留C函数。

使用遗留代码工具,您可以:

  • 提供遗留功能规范。

  • 生成在模拟期间调用遗留代码的C-MEX s函数。

  • 编译并构建生成的s函数进行仿真。

  • 生成一个TLC块文件和可选的rtwmakecfg。M文件,该文件指定为模型生成的代码如何调用遗留代码。

提供遗留功能规范

遗留代码工具函数以特定的数据结构或结构数组作为参数。您可以通过使用'initialize'作为第一个输入调用函数legacy_code()来初始化数据结构。在初始化结构之后,将其属性分配给与正在集成的遗留代码相对应的值。本例中调用的遗留函数的原型是:

void memory_bus_init(COUNTERBUS *mem, int32_T upper_sat, int32_T lower_sat);

void memory_bus_step(COUNTERBUS *输入,COUNTERBUS *mem, COUNTERBUS *输出);

Mem是特定于实例的持久内存,用于应用一个集成步骤延迟。中定义的结构类型定义counterbus.h并通过Simulink实现。金宝app基本工作区中的总线对象。遗留源代码在文件中memory_bus.h,memory_bus.c

evalin (“基地”“负载rtwdemo_lct_data.mat”% rtwdemo_sfun_workDef = legacy_code(“初始化”);def.SFunctionName =“rtwdemo_sfun_work”;def.InitializeConditionsFcnSpec =...'void memory_bus_init(COUNTERBUS work1[1], int32 p1, int32 p2)';def.OutputFcnSpec =...'void memory_bus_step(COUNTERBUS u1[1], COUNTERBUS work1[1], COUNTERBUS y1[1])';def.HeaderFiles = {“memory_bus.h”};def.SourceFiles = {“memory_bus.c”};def.IncPaths = {“rtwdemo_lct_src”};def.SrcPaths = {“rtwdemo_lct_src”};

生成用于仿真的s函数

要根据输入参数'def'提供的描述生成C-MEX s函数,请再次调用函数legacy_code(),并将第一个输入设置为'sfcn_cmex_generate'。s函数在模拟过程中调用遗留函数。s函数的源代码在文件中rtwdemo_sfun_work.c

legacy_code (“sfcn_cmex_generate”def);

编译生成的s函数进行仿真

生成C-MEX S-function源文件后,要编译S-function以使用Simulink®进行模拟,请再次调用函数legacy_code(),并将第一个输入设置为'compile'。金宝app

legacy_code (“编译”def);
###开始编译rtwdemo_sfun_work mex('-I/mathworks/devel/bat/Bdoc23a/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/Bdoc23a_2213998_2750957/tpbe8bb089/simulinkcode 金宝app-ex38707886', '-c', '-outdir', '/tmp/Bdoc23a_2213998_2750957/tpe09d928c_903a_44c6_9543_5cabe750dbec', '/mathworks/devel/bat/Bdoc23a/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src/memory_bus.c')使用'gcc'构建。MEX完成成功。mex('rtwdemo_sfun_work.c', '-I/mathworks/devel/bat/Bdoc23a/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/Bdoc23a_2213998_2750957/tpbe8bb089/金宝appsimulinkcode -ex38707886', '/tmp/Bdoc23a_2213998_2750957/tpe09d928c_903a_44c6_9543_5cabe750dbec/memory_bus.o')使用'gcc'构建。MEX完成成功。完成rtwdemo_sfun_work的编译

为代码生成生成一个TLC块文件

在编译s函数并在模拟中使用它之后,您可以再次调用函数legacy_code(),并将第一个输入设置为'sfcn_tlc_generate'以生成TLC块文件。块文件指定为模型生成的代码如何调用遗留代码。如果您没有生成TLC块文件,并且尝试为包含s函数的模型生成代码,则代码生成将失败。s函数的TLC块文件为:rtwdemo_sfun_work.tlc

legacy_code (“sfcn_tlc_generate”def);

生成rtwmakecfg。m文件代码生成

创建TLC块文件后,可以再次调用函数legacy_code(),将第一个输入设置为'rtwmakecfg_generate'以生成rtwmakecfg。M文件支持代码生成。金宝app如果s -函数所需的源文件和头文件与s -函数不在同一个文件夹中,并且希望在代码生成期间生成的makefile中添加这些依赖项,则生成rtwmakecfg。m文件。

legacy_code (“rtwmakecfg_generate”def);

生成屏蔽s函数块,用于调用生成的s函数

编译C-MEX s -函数源代码后,可以再次调用函数legacy_code(),并将第一个输入设置为'slblock_generate',以生成调用该s -函数的屏蔽s -函数块。软件将块放入一个新的模型中。从那里,您可以将它复制到一个现有的模型。

legacy_code (“slblock_generate”def);

展示模型与遗留代码的集成

该模型rtwdemo_lct_work显示模型与遗留代码的集成。子系统memory_bus充当了对遗留C函数调用的工具。

open_system (“rtwdemo_lct_work”) open_system (“rtwdemo_lct_work / memory_bus”) sim卡(“rtwdemo_lct_work”

集成使用结构参数的外部C函数

将使用Simulink®总线的结构参数与遗留代码工具集成在一起。金宝app

使用遗留代码工具,您可以:

  • 提供遗留功能规范。

  • 生成在模拟期间调用遗留代码的C-MEX s函数。

  • 编译并构建生成的s函数进行仿真。

  • 生成一个TLC块文件和可选的rtwmakecfg。M文件,该文件指定为模型生成的代码如何调用遗留代码。

提供遗留功能规范

遗留代码工具函数以特定的数据结构或结构数组作为参数。您可以通过使用'initialize'作为第一个输入调用函数legacy_code()来初始化数据结构。在初始化结构之后,将其属性分配给与正在集成的遗留代码相对应的值。在这个例子中被调用的遗留函数的原型是:

counterbusFcn(COUNTERBUS *u1, int32_T u2, COUNTERBUS *y1, int32_T *y2)

中定义的结构类型定义counterbus.h并通过Simulink实现。金宝app基本工作区中的总线对象。遗留源代码在文件中counterbus.h,counterbus.c

evalin (“基地”“负载rtwdemo_lct_data.mat”% rtwdemo_sfun_counterbusDef = legacy_code(“初始化”);def.SFunctionName =“rtwdemo_sfun_counterbus”;def.OutputFcnSpec =...'void counterbusFcn(COUNTERBUS u1[1], int32 u2, COUNTERBUS y1[1], int32 y2[1])';def.HeaderFiles = {“counterbus.h”};def.SourceFiles = {“counterbus.c”};def.IncPaths = {“rtwdemo_lct_src”};def.SrcPaths = {“rtwdemo_lct_src”};

生成用于仿真的s函数

要根据输入参数'def'提供的描述生成C-MEX s函数,请再次调用函数legacy_code(),并将第一个输入设置为'sfcn_cmex_generate'。s函数在模拟过程中调用遗留函数。s函数的源代码在文件中rtwdemo_sfun_counterbus.c

legacy_code (“sfcn_cmex_generate”def);

编译生成的s函数进行仿真

生成C-MEX S-function源文件后,要编译S-function以使用Simulink®进行模拟,请再次调用函数legacy_code(),并将第一个输入设置为'compile'。金宝app

legacy_code (“编译”def);
###开始编译rtwdemo_sfun_counterbus mex('-I/mathworks/devel/bat/Bdoc23a/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/Bdoc23a_2213998_2750957/tpbe8bb089/simulinkcode 金宝app-ex90330074', '-c', '-outdir', '/tmp/Bdoc23a_2213998_2750957/tp7b83b9ad_0aa5_4d07_93e4_fa61f800d096', '/mathworks/devel/bat/Bdoc23a/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src/counterbus.c')使用'gcc'构建。MEX完成成功。mex('rtwdemo_sfun_counterbus.c', '-I/mathworks/devel/bat/Bdoc23a/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/Bdoc23a_2213998_2750957/tpbe8bb089/金宝appsimulinkcode -ex90330074', '/tmp/Bdoc23a_2213998_2750957/tp7b83b9ad_0aa5_4d07_93e4_fa61f800d096/counterbus.o')使用'gcc'构建。MEX完成成功。完成rtwdemo_sfun_counterbus的编译

为代码生成生成一个TLC块文件

在编译s函数并在模拟中使用它之后,您可以再次调用函数legacy_code(),并将第一个输入设置为'sfcn_tlc_generate'以生成TLC块文件。块文件指定为模型生成的代码如何调用遗留代码。如果您没有生成TLC块文件,并且尝试为包含s函数的模型生成代码,则代码生成将失败。s函数的TLC块文件为:rtwdemo_sfun_counterbus.tlc

legacy_code (“sfcn_tlc_generate”def);

生成rtwmakecfg。m文件代码生成

创建TLC块文件后,可以再次调用函数legacy_code(),将第一个输入设置为'rtwmakecfg_generate'以生成rtwmakecfg。M文件支持代码生成。金宝app如果s -函数所需的源文件和头文件与s -函数不在同一个文件夹中,并且希望在代码生成期间生成的makefile中添加这些依赖项,则生成rtwmakecfg。m文件。

legacy_code (“rtwmakecfg_generate”def);

生成屏蔽s函数块,用于调用生成的s函数

编译C-MEX s -函数源代码后,可以再次调用函数legacy_code(),并将第一个输入设置为'slblock_generate',以生成调用该s -函数的屏蔽s -函数块。软件将块放入一个新的模型中。从那里,您可以将它复制到一个现有的模型。

legacy_code (“slblock_generate”def);

展示模型与遗留代码的集成

该模型rtwdemo_lct_bus显示模型与遗留代码的集成。子系统TestCounter充当了对遗留C函数调用的工具。

open_system (“rtwdemo_lct_bus”) open_system (“rtwdemo_lct_bus / TestCounter”) sim卡(“rtwdemo_lct_bus”

集成外部C函数,将输入和输出参数作为复杂数据的信号传递

使用遗留代码工具集成使用复杂信号的遗留C函数。

使用遗留代码工具,您可以:

  • 提供遗留功能规范。

  • 生成在模拟期间调用遗留代码的C-MEX s函数。

  • 编译并构建生成的s函数进行仿真。

  • 生成一个TLC块文件和可选的rtwmakecfg。M文件,该文件指定为模型生成的代码如何调用遗留代码。

提供遗留功能规范

遗留代码工具函数以特定的数据结构或结构数组作为参数。您可以通过使用'initialize'作为第一个输入调用函数legacy_code()来初始化数据结构。在初始化结构之后,将其属性分配给与正在集成的遗留代码相对应的值。在这个例子中被调用的遗留函数的原型是:

void cplx_gain(creal_T *input, creal_T *gain, creal_T *output);

creal_T是双精度对象的复数表示。遗留源代码在文件中cplxgain.h,cplxgain.c

% rtwdemo_sfun_gain_scalarDef = legacy_code(“初始化”);def.SFunctionName =“rtwdemo_sfun_cplx_gain”;def.OutputFcnSpec =...'void cplx_gain(complex u1[1], '...'complex p1[1], complex y1[1])'];def.HeaderFiles = {“cplxgain.h”};def.SourceFiles = {“cplxgain.c”};def.IncPaths = {“rtwdemo_lct_src”};def.SrcPaths = {“rtwdemo_lct_src”};

生成用于仿真的s函数

要根据输入参数'def'提供的描述生成C-MEX s函数,请再次调用函数legacy_code(),并将第一个输入设置为'sfcn_cmex_generate'。s函数在模拟过程中调用遗留函数。s函数的源代码在文件中rtwdemo_sfun_cplx_gain.c

legacy_code (“sfcn_cmex_generate”def);

编译生成的s函数进行仿真

生成C-MEX S-function源文件后,要编译S-function以使用Simulink®进行模拟,请再次调用函数legacy_code(),并将第一个输入设置为'compile'。金宝app

legacy_code (“编译”def);
###开始编译rtwdemo_sfun_cplx_gain mex('-I/mathworks/devel/bat/Bdoc23a/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/Bdoc23a_2213998_2750957/tpbe8bb089/simulinkcode 金宝app-ex97344681', '-c', '-outdir', '/tmp/Bdoc23a_2213998_2750957/tp58e944b8_154c_4398_b3dc_29e7786cdcf9', '/mathworks/devel/bat/Bdoc23a/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src/cplxgain.c')使用'gcc'构建。MEX完成成功。mex('rtwdemo_sfun_cplx_gain.c', '-I/mathworks/devel/bat/Bdoc23a/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/Bdoc23a_2213998_2750957/tpbe8bb089/金宝appsimulinkcode -ex97344681', '/tmp/Bdoc23a_2213998_2750957/tp58e944b8_154c_4398_b3dc_29e7786cdcf9/cplxgain.o')使用'gcc'构建。MEX完成成功。完成rtwdemo_sfun_cplx_gain的编译

为代码生成生成一个TLC块文件

在编译s函数并在模拟中使用它之后,您可以再次调用函数legacy_code(),并将第一个输入设置为'sfcn_tlc_generate'以生成TLC块文件。块文件指定为模型生成的代码如何调用遗留代码。如果您没有生成TLC块文件,并且尝试为包含s函数的模型生成代码,则代码生成将失败。s函数的TLC块文件为:rtwdemo_sfun_cplx_gain.tlc

legacy_code (“sfcn_tlc_generate”def);

生成rtwmakecfg。m文件代码生成

创建TLC块文件后,可以再次调用函数legacy_code(),将第一个输入设置为'rtwmakecfg_generate'以生成rtwmakecfg。M文件支持代码生成。金宝app如果s -函数所需的源文件和头文件与s -函数不在同一个文件夹中,并且希望在代码生成期间生成的makefile中添加这些依赖项,则生成rtwmakecfg。m文件。

legacy_code (“rtwmakecfg_generate”def);

生成屏蔽s函数块,用于调用生成的s函数

编译C-MEX s -函数源代码后,可以再次调用函数legacy_code(),并将第一个输入设置为'slblock_generate',以生成调用该s -函数的屏蔽s -函数块。软件将块放入一个新的模型中。从那里,您可以将它复制到一个现有的模型。

legacy_code (“slblock_generate”def);

展示模型与遗留代码的集成

该模型rtwdemo_lct_cplxgain显示模型与遗留代码的集成。子系统complex_gain充当了通过generate s函数调用遗留C函数的工具。

如果isempty (find_system (“SearchDepth”0,“名字”“rtwdemo_lct_cplxgain”) open_system (“rtwdemo_lct_cplxgain”) open_system (“rtwdemo_lct_cplxgain / complex_gain”) sim卡(“rtwdemo_lct_cplxgain”结束

集成传递具有继承维度的参数的外部C函数

此示例展示了如何使用遗留代码工具集成其参数具有继承维度的遗留C函数。

使用遗留代码工具,您可以:

  • 提供遗留功能规范。

  • 生成在模拟期间调用遗留代码的C-MEX s函数。

  • 编译并构建生成的s函数进行仿真。

  • 生成一个TLC块文件和可选的rtwmakecfg。M文件,该文件指定为模型生成的代码如何调用遗留代码。

提供遗留功能规范

遗留代码工具函数以特定的数据结构或结构数组作为参数。您可以通过使用'initialize'作为第一个输入调用函数legacy_code()来初始化数据结构。在初始化结构之后,将其属性分配给与正在集成的遗留代码相对应的值。本例中调用的遗留函数的原型是:

  • void mat_add(real_T *u1, real_T *u2, int32_T n眉毛,int32_T nbCols, real_T *y1)

  • void mat_mult(real_T *u1, real_T *u2, int32_T nbRows1, int32_T nbCols1, int32_T nbCols2, real_T *y1)

real_T是double类型的类型定义,而int32_T是32位整数的类型定义。遗留源代码在文件中mat_ops.h,mat_ops.c

Defs = [];% rtwdemo_sfun_mat_addDef = legacy_code(“初始化”);def.SFunctionName =“rtwdemo_sfun_mat_add”;def.OutputFcnSpec = ['void mat_add(double u1[][], double u2[][], '...'int32 u3, int32 u4, double y1[size(u1,1)][size(u1,2)]])'];def.HeaderFiles = {“mat_ops.h”};def.SourceFiles = {“mat_ops.c”};def.IncPaths = {“rtwdemo_lct_src”};def.SrcPaths = {“rtwdemo_lct_src”};Defs = [Defs;def);% rtwdemo_sfun_mat_multDef = legacy_code(“初始化”);def.SFunctionName =“rtwdemo_sfun_mat_mult”;def.OutputFcnSpec = ['void mat_mult(double u1[p1][p2], double u2[p2][p3], '...'int32 p1, int32 p2, int32 p3,双y1[p1][p3])'];def.HeaderFiles = {“mat_ops.h”};def.SourceFiles = {“mat_ops.c”};def.IncPaths = {“rtwdemo_lct_src”};def.SrcPaths = {“rtwdemo_lct_src”};Defs = [Defs;def);

为模拟生成s函数

要根据输入参数'defs'提供的描述生成C-MEX s -函数,请再次调用函数legacy_code(),并将第一个输入设置为'sfcn_cmex_generate'。s函数在模拟过程中调用遗留函数。s函数的源代码在文件中rtwdemo_sfun_mat_add.c而且rtwdemo_sfun_mat_mult.c

legacy_code (“sfcn_cmex_generate”def);

编译生成的s -函数用于仿真

生成C-MEX s -函数源文件后,要编译s -函数以使用Simulink®进行模拟,请再次调用函数legacy_code(),并将第一个输入设置为“compile”。金宝app

legacy_code (“编译”def);
###开始编译rtwdemo_sfun_mat_add mex('-I/mathworks/devel/bat/Bdoc23a/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/Bdoc23a_2213998_2744300/tp6720a002/simulinkcode 金宝app-ex89794148', '-c', '-outdir', '/tmp/Bdoc23a_2213998_2744300/tp3b8c086b_bdca_4a50_a027_1deb611cbd2f', '/mathworks/devel/bat/Bdoc23a/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src/mat_ops.c')使用'gcc'构建。MEX完成成功。mex('rtwdemo_sfun_mat_add.c', '-I/mathworks/devel/bat/Bdoc23a/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/Bdoc23a_2213998_2744300/tp6720a002/金宝appsimulinkcode -ex89794148', '/tmp/Bdoc23a_2213998_2744300/tp3b8c086b_bdca_4a50_a027_1deb611cbd2f/mat_ops.o')使用'gcc'构建。MEX完成成功。开始编译rtwdemo_sfun_mat_mult mex('-I/mathworks/devel/bat/Bdoc23a/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/Bdoc23a_2213998_2744300/tp6720a002/simulinkcode -ex89794148', '-c', '-outdir', '/tmp/Bdoc23a_2213998_2金宝app744300/tp695fc432_d3e4_4087_9e1f_940ab5f675eb', '/mathworks/devel/bat/Bdoc23a/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src/mat_ops.c')使用'gcc'构建。MEX完成成功。mex('rtwdemo_sfun_mat_mult.c', '-I/mathworks/devel/bat/Bdoc23a/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/Bdoc23a_2213998_2744300/tp6720a002/金宝appsimulinkcode -ex89794148', '/tmp/Bdoc23a_2213998_2744300/tp695fc432_d3e4_4087_9e1f_940ab5f675eb/mat_ops.o')使用'gcc'构建。MEX完成成功。完成rtwdemo_sfun_mat_mult的编译

为代码生成生成TLC块文件

在编译s -函数并在模拟中使用它们之后,可以再次调用函数legacy_code(),并将第一个输入设置为'sfcn_tlc_generate'以生成TLC块文件。块文件指定为模型生成的代码如何调用遗留代码。如果不生成TLC块文件,并且尝试为包含s -函数的模型生成代码,则代码生成失败。s -函数的TLC块文件为rtwdemo_sfun_mat_add.tlc而且rtwdemo_sfun_mat_mult.tlc

legacy_code (“sfcn_tlc_generate”def);

生成rtwmakecfg。m文件代码生成

创建TLC块文件后,可以再次调用函数legacy_code(),将第一个输入设置为'rtwmakecfg_generate'以生成rtwmakecfg。M文件支持代码生成。金宝app如果s -函数所需的源文件和头文件与s -函数不在同一个文件夹中,并且希望在代码生成期间生成的makefile中添加这些依赖项,则生成rtwmakecfg。m文件。

legacy_code (“rtwmakecfg_generate”def);

生成屏蔽s函数块,用于调用生成的s函数

编译C-MEX s -函数源代码后,可以再次调用函数legacy_code(),并将第一个输入设置为'slblock_generate',以生成调用s -函数的屏蔽s -函数块。软件将积木放入一个新的模型中。从那里,您可以将它们复制到现有的模型中

legacy_code (“slblock_generate”def);

显示与遗留代码生成的集成

该模型rtwdemo_lct_inherit_dims显示模型与遗留代码的集成。子系统TestMatOps充当了对遗留C函数调用的工具,单元延迟用于存储以前的输出值。

open_system (“rtwdemo_lct_inherit_dims”) open_system (“rtwdemo_lct_inherit_dims / TestMatOps”) sim卡(“rtwdemo_lct_inherit_dims”

集成外部C函数,将参数作为多维信号传递

这个例子展示了如何使用遗留代码工具将遗留C函数与多维信号集成。

使用遗留代码工具,您可以:

  • 提供遗留功能规范。

  • 生成在模拟期间调用遗留代码的C-MEX s函数。

  • 编译并构建生成的s函数进行仿真。

  • 生成一个TLC块文件和可选的rtwmakecfg。M文件,该文件指定为模型生成的代码如何调用遗留代码。

提供遗留功能规范

遗留代码工具函数以特定的数据结构或结构数组作为参数。您可以通过使用'initialize'作为第一个输入调用函数legacy_code()来初始化数据结构。在初始化结构之后,将其属性分配给与正在集成的遗留代码相对应的值。在这个例子中被调用的遗留函数的原型是:

void array3d_add(real_T *y1, real_T *u1, real_T *u2, int32_T n眉毛,int32_T nbCols, int32_T nbPages);

real_T是double类型的类型定义,而int32_T是32位整数的类型定义。遗留源代码在文件中ndarray_ops.h,ndarray_ops.c

% rtwdemo_sfun_ndarray_addDef = legacy_code(“初始化”);def.SFunctionName =“rtwdemo_sfun_ndarray_add”;def.OutputFcnSpec =...空白array3d_add(双y₁[大小(u1, 1)][大小(u1, 2)][大小(u1, 3)],”...'双u1[][][],双u2[][][], '...'int32 size(u1,1), int32 size(u1,2), int32 size(u1,3) '];def.HeaderFiles = {“ndarray_ops.h”};def.SourceFiles = {“ndarray_ops.c”};def.IncPaths = {“rtwdemo_lct_src”};def.SrcPaths = {“rtwdemo_lct_src”};

y1是一个三维输出信号,与三维输入信号u1的尺寸相同。注意,传递给遗留函数的最后3个参数对应于3- d输入信号u1的每个维度中的元素数量。

生成用于仿真的s函数

要根据输入参数'def'提供的描述生成C-MEX s函数,请再次调用函数legacy_code(),并将第一个输入设置为'sfcn_cmex_generate'。s函数在模拟过程中调用遗留函数。s函数的源代码在文件中rtwdemo_sfun_ndarray_add.c

legacy_code (“sfcn_cmex_generate”def);

编译生成的s函数进行仿真

生成C-MEX S-function源文件后,要编译S-function以使用Simulink®进行模拟,请再次调用函数legacy_code(),并将第一个输入设置为'compile'。金宝app

legacy_code (“编译”def);
###开始编译rtwdemo_sfun_ndarray_add mex('-I/mathworks/devel/bat/Bdoc23a/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/Bdoc23a_2213998_2744300/tp6720a002/simulinkcode 金宝app-ex14927435', '-c', '-outdir', '/tmp/Bdoc23a_2213998_2744300/tpac8627a2_1879_4109_8942_ba8324d428e8', '/mathworks/devel/bat/Bdoc23a/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src/ndarray_ops.c')使用'gcc'构建。MEX完成成功。mex('rtwdemo_sfun_ndarray_add.c', '-I/mathworks/devel/bat/Bdoc23a/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/Bdoc23a_2213998_2744300/tp6720a002/金宝appsimulinkcode -ex14927435', '/tmp/Bdoc23a_2213998_2744300/tpac8627a2_1879_4109_8942_ba8324d428e8/ndarray_ops.o')使用'gcc'构建。MEX完成成功。完成rtwdemo_sfun_ndarray_add的编译

为代码生成生成一个TLC块文件

在编译s函数并在模拟中使用它之后,您可以再次调用函数legacy_code(),并将第一个输入设置为'sfcn_tlc_generate'以生成TLC块文件。块文件指定为模型生成的代码如何调用遗留代码。如果您没有生成TLC块文件,并且尝试为包含s函数的模型生成代码,则代码生成将失败。s函数的TLC块文件为:rtwdemo_sfun_ndarray_add.tlc

legacy_code (“sfcn_tlc_generate”def);

生成rtwmakecfg。m文件代码生成

创建TLC块文件后,可以再次调用函数legacy_code(),将第一个输入设置为'rtwmakecfg_generate'以生成rtwmakecfg。M文件支持代码生成。金宝app如果s -函数所需的源文件和头文件与s -函数不在同一个文件夹中,并且希望在代码生成期间生成的makefile中添加这些依赖项,则生成rtwmakecfg。m文件。

legacy_code (“rtwmakecfg_generate”def);

生成屏蔽s函数块,用于调用生成的s函数

编译C-MEX s -函数源代码后,可以再次调用函数legacy_code(),并将第一个输入设置为'slblock_generate',以生成调用该s -函数的屏蔽s -函数块。软件将块放入一个新的模型中。从那里,您可以将它复制到一个现有的模型。

legacy_code (“slblock_generate”def);

显示与遗留代码生成的集成

该模型rtwdemo_lct_ndarray显示模型与遗留代码的集成。子系统ndarray_add充当了对遗留C函数调用的工具。

open_system (“rtwdemo_lct_ndarray”) open_system (“rtwdemo_lct_ndarray / ndarray_add”) sim卡(“rtwdemo_lct_ndarray”

集成实现开始和终止操作的外部C函数

通过使用遗留代码工具集成具有启动和终止操作的遗留C函数。

使用遗留代码工具,您可以:

  • 提供遗留功能规范。

  • 生成在模拟期间调用遗留代码的C-MEX s函数。

  • 编译并构建生成的s函数进行仿真。

  • 生成一个TLC块文件和可选的rtwmakecfg。M文件,该文件指定为模型生成的代码如何调用遗留代码。

提供遗留功能规范

遗留代码工具函数以特定的数据结构或结构数组作为参数。您可以通过使用'initialize'作为第一个输入调用函数legacy_code()来初始化数据结构。在初始化结构之后,将其属性分配给与正在集成的遗留代码相对应的值。本例中调用的遗留函数的原型是:

  • void initFaultCounter(unsigned int *counter)

  • void openLogFile(void **fid)

  • void incAndLogFaultCounter(void *fid, unsigned int *counter, double time)

  • void closeLogFile(void **fid)

遗留源代码在文件中your_types.hfault.h,fault.c

% rtwdemo_sfun_faultDef = legacy_code(“初始化”);def.SFunctionName =“rtwdemo_sfun_fault”;def.InitializeConditionsFcnSpec =“initFaultCounter (uint32 work2[1])”;def.StartFcnSpec =“openLogFile (void * * work1)”;def.OutputFcnSpec =...'incAndLogFaultCounter(void *work1, uint32 work2[1], double u1)';def.TerminateFcnSpec =“closeLogFile (void * * work1)”;def.HeaderFiles = {“fault.h”};def.SourceFiles = {“fault.c”};def.IncPaths = {“rtwdemo_lct_src”};def.SrcPaths = {“rtwdemo_lct_src”};def.Options.useTlcWithAccel = false;

生成用于仿真的s函数

要根据输入参数'def'提供的描述生成C-MEX s函数,请再次调用函数legacy_code(),并将第一个输入设置为'sfcn_cmex_generate'。s函数在模拟过程中调用遗留函数。s函数的源代码在文件中rtwdemo_sfun_fault.c

legacy_code (“sfcn_cmex_generate”def);

编译生成的s函数进行仿真

生成C-MEX S-function源文件后,要编译S-function以使用Simulink®进行模拟,请再次调用函数legacy_code(),并将第一个输入设置为'compile'。金宝app

legacy_code (“编译”def);
###开始编译rtwdemo_sfun_fault mex('-I/mathworks/devel/bat/Bdoc23a/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/Bdoc23a_2213998_2744300/tp6720a002/simulinkcode 金宝app-ex46254423', '-c', '-outdir', '/tmp/Bdoc23a_2213998_2744300/tp4628ad65_c321_4afb_9288_975dff639f74', '/mathworks/devel/bat/Bdoc23a/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src/fault.c')使用'gcc'构建。MEX完成成功。mex(' rtwdemo_sfun_error .c', '-I/mathworks/devel/bat/Bdoc23a/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/Bdoc23a_2213998_2744300/tp6720a00金宝app2/simulinkcode -ex46254423', '/tmp/Bdoc23a_2213998_2744300/tp4628ad65_c321_4afb_9288_975dff639f74/fault.o')使用'gcc'构建。MEX完成成功。完成rtwdemo_sfun_fault的编译

为代码生成生成一个TLC块文件

在编译s函数并在模拟中使用它之后,您可以再次调用函数legacy_code(),并将第一个输入设置为'sfcn_tlc_generate'以生成TLC块文件。块文件指定为模型生成的代码如何调用遗留代码。如果您没有生成TLC块文件,并且尝试为包含s函数的模型生成代码,则代码生成将失败。s函数的TLC块文件为:rtwdemo_sfun_fault.tlc

legacy_code (“sfcn_tlc_generate”def);

生成rtwmakecfg。m文件代码生成

创建TLC块文件后,可以再次调用函数legacy_code(),将第一个输入设置为'rtwmakecfg_generate'以生成rtwmakecfg。M文件支持代码生成。金宝app如果s -函数所需的源文件和头文件与s -函数不在同一个文件夹中,并且希望在代码生成期间生成的makefile中添加这些依赖项,则生成rtwmakecfg。m文件。

legacy_code (“rtwmakecfg_generate”def);

生成屏蔽s函数块,用于调用生成的s函数

编译C-MEX s -函数源代码后,可以再次调用函数legacy_code(),并将第一个输入设置为'slblock_generate',以生成调用该s -函数的屏蔽s -函数块。软件将块放入一个新的模型中。从那里,您可以将它复制到一个现有的模型。

legacy_code (“slblock_generate”def);

显示与遗留代码生成的集成

该模型rtwdemo_lct_start_term显示模型与遗留代码的集成。子系统TestFixpt作为对遗留C函数的调用的集合,作用域将函数的输出与内置Simulink®产品块的输出进行比较;金宝app结果应该是相同的。

open_system (“rtwdemo_lct_start_term”) open_system (“rtwdemo_lct_start_term / TestFault”) sim卡(“rtwdemo_lct_start_term”

集成实现n维表查找的外部C函数

通过使用遗留代码工具集成实现n维表查找的遗留C函数。

使用遗留代码工具,您可以:

  • 提供遗留功能规范。

  • 生成在模拟期间调用遗留代码的C-MEX s函数。

  • 编译并构建生成的s函数进行仿真。

  • 生成一个TLC块文件和可选的rtwmakecfg。M文件,该文件指定为模型生成的代码如何调用遗留代码。

提供遗留功能规范

遗留代码工具函数以特定的数据结构或结构数组作为参数。您可以通过使用'initialize'作为第一个输入调用函数legacy_code()来初始化数据结构。在初始化结构之后,将其属性分配给与正在集成的遗留代码相对应的值。在这个例子中被调用的遗留函数的原型是:

FLT directLookupTableND(const FLT *tableND, const UINT32 nbDims, const UINT32 *tableDims, const UINT32 *tableIdx)

FLT是float的类型定义,UINT32是unsigned int32的类型定义。遗留源代码在文件中your_types.hlookupTable.h,directLookupTableND.c

Defs = [];evalin (“基地”“负载rtwdemo_lct_data.mat”% rtwdemo_sfun_dlut3DDef = legacy_code(“初始化”);def.SFunctionName =“rtwdemo_sfun_dlut3D”;def.OutputFcnSpec ='single y1 = DirectLookupTable3D(single p1[][][], uint32 p2[3], uint32 u1[3])';def.HeaderFiles = {“lookupTable.h”};def.SourceFiles = {“directLookupTableND.c”};def.IncPaths = {“rtwdemo_lct_src”};def.SrcPaths = {“rtwdemo_lct_src”};Defs = [Defs;def);% rtwdemo_sfun_dlut4DDef = legacy_code(“初始化”);def.SFunctionName =“rtwdemo_sfun_dlut4D”;def.OutputFcnSpec ='single y1 = DirectLookupTable4D(single p1[][][][], uint32 p2[4], uint32 u1[4])';def.HeaderFiles = {“lookupTable.h”};def.SourceFiles = {“directLookupTableND.c”};def.IncPaths = {“rtwdemo_lct_src”};def.SrcPaths = {“rtwdemo_lct_src”};Defs = [Defs;def);

为模拟生成s函数

要根据输入参数'defs'提供的描述生成C-MEX s -函数,请再次调用函数legacy_code()。将第一个输入设置为“sfcn_cmex_generate”。s函数在模拟过程中调用遗留函数。s -函数的源代码在文件中rtwdemo_sfun_dlut3D.c而且rtwdemo_sfun_dlut4D.c

legacy_code (“sfcn_cmex_generate”def);

编译生成的s -函数用于仿真

生成C-MEX s -函数源文件后,要编译s -函数以使用Simulink®进行模拟,请再次调用函数legacy_code()。金宝app将第一个输入设置为'compile'。

legacy_code (“编译”def);
###开始编译rtwdemo_sfun_dlut3D mex('-I/mathworks/devel/bat/Bdoc23a/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/Bdoc23a_2213998_2744300/tp6720a002/simulinkcode 金宝app-ex19426386', '-c', '-outdir', '/tmp/Bdoc23a_2213998_2744300/tpa612e3d2_2d64_4c26_9d64_f29562b2a7de', '/mathworks/devel/bat/Bdoc23a/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src/directLookupTableND.c')使用'gcc'构建。MEX完成成功。mex(' rtwdemo_sfun_dlut3dc ', '-I/mathworks/devel/bat/Bdoc23a/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/Bdoc23a_2213998_2744300/tp6720a002金宝app/simulinkcode -ex19426386', '/tmp/Bdoc23a_2213998_2744300/tpa612e3d2_2d64_4c26_9d64_f29562b2a7de/directLookupTableND.o')使用'gcc'构建。MEX完成成功。开始编译rtwdemo_sfun_dlut4D mex('-I/mathworks/devel/bat/Bdoc23a/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/Bdoc23a_2213998_2744300/tp6720a002/simulinkcode -ex19426386', '-c', '-outdir', '/tmp/Bdoc23a_2213998_金宝app2744300/tp1eb85650_f175_462d_b603_58b62985819e', '/mathworks/devel/bat/Bdoc23a/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src/directLookupTableND.c')使用'gcc'构建。MEX完成成功。mex(' rtwdemo_sfun_dlut4dc ', '-I/mathworks/devel/bat/Bdoc23a/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/Bdoc23a_2213998_2744300/tp6720a002金宝app/simulinkcode -ex19426386', '/tmp/Bdoc23a_2213998_2744300/tp1eb85650_f175_462d_b603_58b62985819e/directLookupTableND.o')使用'gcc'构建。MEX完成成功。完成rtwdemo_sfun_dlut4D的编译

为代码生成生成TLC块文件

在编译s函数并在模拟中使用它们之后,可以再次调用函数legacy_code()。将第一个输入设置为“sfcn_tlc_generate”以生成TLC块文件。块文件指定为模型生成的代码如何调用遗留代码。如果不生成TLC块文件,并且尝试为包含s -函数的模型生成代码,则代码生成失败。s -函数的TLC块文件为rtwdemo_sfun_dlut3D.tlc而且rtwdemo_sfun_dlut4D.tlc

legacy_code (“sfcn_tlc_generate”def);

生成rtwmakecfg。m文件代码生成

创建TLC块文件之后,可以再次调用函数legacy_code()。将第一个输入设置为'rtwmakecfg_generate'以生成rtwmakecfg。M文件支持代码生成。金宝app如果s -函数所需的源文件和头文件与s -函数不在同一个文件夹中,并且希望在代码生成期间生成的makefile中添加这些依赖项,则生成rtwmakecfg。m文件。

legacy_code (“rtwmakecfg_generate”def);

生成屏蔽s函数块,用于调用生成的s函数

编译C-MEX s -函数源代码后,可以再次调用函数legacy_code()。将第一个输入设置为'slblock_generate'以生成调用s函数的屏蔽s函数块。软件将积木放入一个新的模型中。您可以将这些块复制到现有模型中。

legacy_code (“slblock_generate”def);

显示与遗留代码生成的集成

该模型rtwdemo_lct_lut显示模型与遗留代码的集成。子系统TestFixpt充当了对遗留C函数调用的工具,而Display块将函数的输出与内置Simulink®查找块的输出进行比较。金宝app结果是相同的。

open_system (“rtwdemo_lct_lut”) open_system (“rtwdemo_lct_lut / TestLut1”) sim卡(“rtwdemo_lct_lut”

集成外部C函数,将参数作为多维信号传递

这个例子展示了如何使用遗留代码工具将遗留C函数与多维信号集成。

使用遗留代码工具,您可以:

  • 提供遗留功能规范。

  • 生成在模拟期间调用遗留代码的C-MEX s函数。

  • 编译并构建生成的s函数进行仿真。

  • 生成一个TLC块文件和可选的rtwmakecfg。M文件,该文件指定为模型生成的代码如何调用遗留代码。

提供遗留功能规范

遗留代码工具函数以特定的数据结构或结构数组作为参数。您可以通过使用'initialize'作为第一个输入调用函数legacy_code()来初始化数据结构。在初始化结构之后,将其属性分配给与正在集成的遗留代码相对应的值。在这个例子中被调用的遗留函数的原型是:

void array3d_add(real_T *y1, real_T *u1, real_T *u2, int32_T n眉毛,int32_T nbCols, int32_T nbPages);

real_T是double类型的类型定义,而int32_T是32位整数的类型定义。遗留源代码在文件中ndarray_ops.h,ndarray_ops.c

% rtwdemo_sfun_ndarray_addDef = legacy_code(“初始化”);def.SFunctionName =“rtwdemo_sfun_ndarray_add”;def.OutputFcnSpec =...空白array3d_add(双y₁[大小(u1, 1)][大小(u1, 2)][大小(u1, 3)],”...'双u1[][][],双u2[][][], '...'int32 size(u1,1), int32 size(u1,2), int32 size(u1,3) '];def.HeaderFiles = {“ndarray_ops.h”};def.SourceFiles = {“ndarray_ops.c”};def.IncPaths = {“rtwdemo_lct_src”};def.SrcPaths = {“rtwdemo_lct_src”};

y1是一个三维输出信号,与三维输入信号u1的尺寸相同。注意,传递给遗留函数的最后3个参数对应于3- d输入信号u1的每个维度中的元素数量。

生成用于仿真的s函数

要根据输入参数'def'提供的描述生成C-MEX s函数,请再次调用函数legacy_code(),并将第一个输入设置为'sfcn_cmex_generate'。s函数在模拟过程中调用遗留函数。s函数的源代码在文件中rtwdemo_sfun_ndarray_add.c

legacy_code (“sfcn_cmex_generate”def);

编译生成的s函数进行仿真

生成C-MEX S-function源文件后,要编译S-function以使用Simulink®进行模拟,请再次调用函数legacy_code(),并将第一个输入设置为'compile'。金宝app

legacy_code (“编译”def);
###开始编译rtwdemo_sfun_ndarray_add mex('-I/mathworks/devel/bat/Bdoc23a/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/Bdoc23a_2213998_2744300/tp6720a002/simulinkcode 金宝app-ex14927435', '-c', '-outdir', '/tmp/Bdoc23a_2213998_2744300/tpac8627a2_1879_4109_8942_ba8324d428e8', '/mathworks/devel/bat/Bdoc23a/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src/ndarray_ops.c')使用'gcc'构建。MEX完成成功。mex('rtwdemo_sfun_ndarray_add.c', '-I/mathworks/devel/bat/Bdoc23a/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/Bdoc23a_2213998_2744300/tp6720a002/金宝appsimulinkcode -ex14927435', '/tmp/Bdoc23a_2213998_2744300/tpac8627a2_1879_4109_8942_ba8324d428e8/ndarray_ops.o')使用'gcc'构建。MEX完成成功。完成rtwdemo_sfun_ndarray_add的编译

为代码生成生成一个TLC块文件

在编译s函数并在模拟中使用它之后,您可以再次调用函数legacy_code(),并将第一个输入设置为'sfcn_tlc_generate'以生成TLC块文件。块文件指定为模型生成的代码如何调用遗留代码。如果您没有生成TLC块文件,并且尝试为包含s函数的模型生成代码,则代码生成将失败。s函数的TLC块文件为:rtwdemo_sfun_ndarray_add.tlc

legacy_code (“sfcn_tlc_generate”def);

生成rtwmakecfg。m文件代码生成

创建TLC块文件后,可以再次调用函数legacy_code(),将第一个输入设置为'rtwmakecfg_generate'以生成rtwmakecfg。M文件支持代码生成。金宝app如果s -函数所需的源文件和头文件与s -函数不在同一个文件夹中,并且希望在代码生成期间生成的makefile中添加这些依赖项,则生成rtwmakecfg。m文件。

legacy_code (“rtwmakecfg_generate”def);

生成屏蔽s函数块,用于调用生成的s函数

编译C-MEX s -函数源代码后,可以再次调用函数legacy_code(),并将第一个输入设置为'slblock_generate',以生成调用该s -函数的屏蔽s -函数块。软件将块放入一个新的模型中。从那里,您可以将它复制到一个现有的模型。

legacy_code (“slblock_generate”def);

显示与遗留代码生成的集成

该模型rtwdemo_lct_ndarray显示模型与遗留代码的集成。子系统ndarray_add充当了对遗留C函数调用的工具。

open_system (“rtwdemo_lct_ndarray”) open_system (“rtwdemo_lct_ndarray / ndarray_add”) sim卡(“rtwdemo_lct_ndarray”

将外部C函数与块采样时间指定、继承和参数化集成

这个示例展示了如何使用遗留代码工具将遗留C函数与块的指定、继承和参数化的示例时间集成在一起。

使用遗留代码工具,您可以:

  • 提供遗留功能规范。

  • 生成在模拟期间调用遗留代码的C-MEX s函数。

  • 编译并构建生成的s函数进行仿真。

  • 生成一个TLC块文件和可选的rtwmakecfg。M文件,该文件指定为模型生成的代码如何调用遗留代码。

提供遗留功能规范

遗留代码工具函数以特定的数据结构或结构数组作为参数。您可以通过使用'initialize'作为第一个输入调用函数legacy_code()来初始化数据结构。在初始化结构之后,将其属性分配给与正在集成的遗留代码相对应的值。在这个例子中被调用的遗留函数的原型是:

FLT增益标量(const FLT in, const FLT增益)

FLT是float的类型定义。遗留源代码在文件中your_types.hgain.h,gainScalar.c

Defs = [];% rtwdemo_sfun_st_inheritedDef = legacy_code(“初始化”);def.SFunctionName =“rtwdemo_sfun_st_inherited”;def.OutputFcnSpec ='single y1 = gainScalar(single u1, single p1)';def.HeaderFiles = {“gain.h”};def.SourceFiles = {“gainScalar.c”};def.IncPaths = {“rtwdemo_lct_src”};def.SrcPaths = {“rtwdemo_lct_src”};Defs = [Defs;def);% rtwdemo_sfun_st_fixedDef = legacy_code(“初始化”);def.SFunctionName =“rtwdemo_sfun_st_fixed”;def.OutputFcnSpec ='single y1 = gainScalar(single u1, single p1)';def.HeaderFiles = {“gain.h”};def.SourceFiles = {“gainScalar.c”};def.IncPaths = {“rtwdemo_lct_src”};def.SrcPaths = {“rtwdemo_lct_src”};def.SampleTime = [2 1];Defs = [Defs;def);% rtwdemo_sfun_st_parameterizedDef = legacy_code(“初始化”);def.SFunctionName =“rtwdemo_sfun_st_parameterized”;def.OutputFcnSpec ='single y1 = gainScalar(single u1, single p1)';def.HeaderFiles = {“gain.h”};def.SourceFiles = {“gainScalar.c”};def.IncPaths = {“rtwdemo_lct_src”};def.SrcPaths = {“rtwdemo_lct_src”};def.SampleTime =“参数化”;Defs = [Defs;def);

为模拟生成s函数

要根据输入参数'defs'提供的描述生成C-MEX s -函数,请再次调用函数legacy_code(),并将第一个输入设置为'sfcn_cmex_generate'。s函数在模拟过程中调用遗留函数。s -函数的源代码在文件中rtwdemo_sfun_st_inherited.c而且rtwdemo_sfun_st_fixed.crtwdemo_sfun_st_parameterized.c

legacy_code (“sfcn_cmex_generate”def);

编译生成的s -函数用于仿真

生成C-MEX s -函数源文件后,要编译s -函数以使用Simulink®进行模拟,请再次调用函数legacy_code(),并将第一个输入设置为“compile”。金宝app

legacy_code (“编译”def);
###开始编译rtwdemo_sfun_st_inherited mex('-I/mathworks/devel/bat/Bdoc23a/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/Bdoc23a_2213998_2750957/tpbe8bb089/simulinkcode 金宝app-ex74504488', '-c', '-outdir', '/tmp/Bdoc23a_2213998_2750957/tpc8cf8f5f_3cbc_4153_b30e_8f0c7dfc67a3', '/mathworks/devel/bat/Bdoc23a/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src/ gainscala .c')使用'gcc'构建。MEX完成成功。/tmp/Bdoc23a_2213998_2750957/tpbe8bb089/simulinkcode -ex74504488', '/tmp/Bdoc23a_2213998_2750957/tpc8cf8f5f_3cbc_4153_b30e_8f0c7dfc67a3/ gainscala .o')使用“gcc”构建。金宝appMEX完成成功。完成编译rtwdemo_sfun_st_inherited ## Exit ##开始编译rtwdemo_sfun_st_fixed mex('-I/mathworks/devel/bat/Bdoc23a/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/Bdoc23a_2213998_2750957/tpbe8bb089/simulinkcode -ex74504488', '-c',金宝app '-outdir', '/tmp/Bdoc23a_2213998_2750957/tp229eb6dd_0f49_49e8_a873_6c0c89bdd19c', '/mathworks/devel/bat/Bdoc23a/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src/ gainscala .c')用gcc构建。MEX完成成功。mex(' rtwdemo_sfun_st_fixedc ', '-I/mathworks/devel/bat/Bdoc23a/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/Bdoc23a_2213998_2750957/tpbe8bb089金宝app/simulinkcode -ex74504488', '/tmp/Bdoc23a_2213998_2750957/tp229eb6dd_0f49_49e8_a873_6c0c89bdd19c/ gainscala .o')使用'gcc'构建。MEX完成成功。开始编译rtwdemo_sfun_st_parameterized mex('-I/mathworks/devel/bat/Bdoc23a/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/Bdoc23a_2213998_2750957/tpbe8bb089/simulinkcode -ex74504488', '-c', '-outdir', '/tmp/Bdoc23a_2213998_27金宝app50957/tpc24c476f_c6cd_4325_b04b_de6dc03d6777', '/mathworks/devel/bat/Bdoc23a/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src/ gainscala .c')使用'gcc'构建。MEX完成成功。 mex('rtwdemo_sfun_st_parameterized.c', '-I/mathworks/devel/bat/Bdoc23a/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/Bdoc23a_2213998_2750957/tpbe8bb089/simulinkcoder-ex74504488', '/tmp/Bdoc23a_2213998_2750957/tpc24c476f_c6cd_4325_b04b_de6dc03d6777/gainScalar.o') Building with 'gcc'. MEX completed successfully. ### Finish Compiling rtwdemo_sfun_st_parameterized ### Exit

为代码生成生成TLC块文件

在编译s -函数并在模拟中使用它们之后,可以再次调用函数legacy_code(),并将第一个输入设置为'sfcn_tlc_generate'以生成TLC块文件。块文件指定为模型生成的代码如何调用遗留代码。如果不生成TLC块文件,并且尝试为包含s -函数的模型生成代码,则代码生成失败。s -函数的TLC块文件为rtwdemo_sfun_st_inherited.tlc而且rtwdemo_sfun_st_fixed.tlcrtwdemo_sfun_st_parameterized.tlc

legacy_code (“sfcn_tlc_generate”def);

生成rtwmakecfg。m文件代码生成

创建TLC块文件后,可以再次调用函数legacy_code(),将第一个输入设置为'rtwmakecfg_generate'以生成rtwmakecfg。M文件支持代码生成。金宝app如果s -函数所需的源文件和头文件与s -函数不在同一个文件夹中,并且希望在代码生成期间生成的makefile中添加这些依赖项,则生成rtwmakecfg。m文件。

legacy_code (“rtwmakecfg_generate”def);

生成屏蔽s函数块,用于调用生成的s函数

编译C-MEX s -函数源代码后,可以再次调用函数legacy_code(),并将第一个输入设置为'slblock_generate',以生成调用s -函数的屏蔽s -函数块。软件将积木放入一个新的模型中。从那里,您可以将它们复制到现有的模型中。

legacy_code (“slblock_generate”def);

显示与遗留代码生成的集成

该模型rtwdemo_lct_sampletime显示模型与遗留代码的集成。子系统sample_time用作对遗留C函数的调用的集合,单元延迟用于存储以前的输出值。

open_system (“rtwdemo_lct_sampletime”) open_system (“rtwdemo_lct_sampletime / sample_time”) sim卡(“rtwdemo_lct_sampletime”

另请参阅

相关的话题