文档

c++对象方法作为遗留函数

这个示例向您展示了如何使用遗留代码工具集成遗留c++对象方法。

遗留代码工具允许您:

  • 提供遗留功能规范,

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

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

提供遗留功能规范

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

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

遗留源代码可以在文件中找到adder_cpp.h而且adder_cpp.cpp

% sldemo_sfun_adder_cppDef = legacy_code(“初始化”);def.SFunctionName =“sldemo_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 = {“sldemo_lct_src”};def.SrcPaths = {“sldemo_lct_src”};def.Options.language =“c++”;def.Options.useTlcWithAccel = false;

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

函数legacy_code()在第一个输入设置为'generate_for_sim'时再次被调用,以便根据输入参数'def'提供的描述自动生成和编译C-MEX s -函数。这个s函数用于在模拟中调用遗留函数。s函数的源代码可以在文件中找到sldemo_sfun_adder_cpp.cpp

legacy_code (“generate_for_sim”def);
###开始编译sldemo_sfun_adder_cpp mex('-I/mathworks/devel/bat/Bdoc19b/build/matlab/toolbox/ matlab/toolb金宝appox/simulink/ toolbox/simulink/ simulink/ simulink/simdemos/simfeatures/sldemo_lct_src', '-I/tmp/Bdoc19b_1305395_49494/tpb929f43e', '-c', '-outdir', '/tmp/Bdoc19b_1305395_49494/tp02a9ff72_4d9e_49d0_bc3c_a97d1ee79e35', '/mathworks/devel/bat/Bdoc19b/build/matlab/toolbox/simulink/simdemos/simfeatures/sldemo_lct_src/ adder_cppp .cpp')使用'g++'构建。MEX完成成功。“-I/tmp/Bdoc19b_1305395_49494/tpb929f43e”,“-cxx”,“/tmp/Bdoc19b_1305395_49494/tp02a9ff7金宝app2_4d9e_49d0_bc3c_a97d1ee79e35/ adder_cppp .o”)使用“g++”构建。MEX完成成功。完成sldemo_sfun_adder_cpp的编译

生成rtwmakecfg。m文件代码生成

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

注意:仅当您打算在加速模式下模拟模型时,才需要完成此步骤。

legacy_code (“rtwmakecfg_generate”def);

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

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

% legacy_code('slblock_generate', def);

演示使用遗留代码生成的集成

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

open_system (“sldemo_lct_cpp”) sim卡(“sldemo_lct_cpp”);