主要内容

C ++对象方法作为遗留功能

此示例显示了如何使用遗留代码工具集成传统的C ++对象方法。

遗留代码工具允许您:

  • 提供遗留功能规范,

  • 生成在仿真期间使用的C ++ MEX S函数,以调用遗留代码,并且

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

提供遗留功能规范

具有遗留代码工具提供的函数将特定的数据结构或结构数组作为参数。通过使用“初始化”作为第一个输入来初始化数据结构。初始化结构后,您必须将其属性分配给与已集成的传统代码对应的值。在此示例中使用的传统C ++类的定义是:

ClassAdder {私有:int int_state;公众:Adder();int add_one(int增量);int get_val();};

遗留源代码是在文件中找到的Adder_cpp.h.Adder_cpp.cpp.

%sldemo_sfun_adder_cpp.def = letacacy_code('初始化');def.sfunctionname =.'sldemo_sfun_adder_cpp';def.startfcnspec ='createadder()';def.outputfcnspec =.'int32 y1 = AdderOutput(Int32 U1)';def.termatefcnspec ='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函数以在仿真期间使用

使用第一个输入设置为“generate_for_sim”来调用函数legacy_code(),以便根据输入参数'def'提供的描述自动生成和编译c-mex s函数。此S函数用于调用仿真中的遗留功能。在文件中找到了S函数的源代码sldemo_sfun_adder_cpp.cpp.

Legacy_code('generate_for_sim',def);
###开始编译SLDEMO_SFUN_ADDER_CPP MEX(' -  I / TMP / BDOC22A_1891349_107669 / TP2E4ADC6E / EX93865240 / SLDEMO_LCT_SRC','-I / TMP / BDOC22A_1891349_107669 / TP2E4ADC6E / EX93865240','-C','-OUTDIR','/ TMP /bdoc22a_1891349_107669 / tpcdf3d1cb_a700_4483_9bda_1bbb3f59b331','/tmp/bdoc22a_189/tp2e4adc6e/ex93865240/sldemo_lct_src/adder_cpp.cpp')与'g ++'构建。MEX成功完成。mex('sldemo_sfun_adder_cpp.cpp', '-I/tmp/Bdoc22a_1891349_107669/tp2e4adc6e/ex93865240/sldemo_lct_src', '-I/tmp/Bdoc22a_1891349_107669/tp2e4adc6e/ex93865240', '-cxx', '/tmp/Bdoc22a_1891349_107669/tpcdf3d1cb_a700_4483_9bda_1bbb3f59b331/adder_cpp用'g ++'建造。MEX成功完成。###完成编译sldemo_sfun_adder_cpp ###退出

生成RTWMAKECFG.M文件以进行代码生成

在创建TLC块文件之后,可以将第一个输入设置为“RTWMakecFG_GANERALE”来再次调用函数legacy_code(),以便通过Simulink®Coder™生成RTWMakecfg.m文件以支持代码生成。金宝app金宝app如果S函数的所需源和标头文件不在同一目录中,则生成RTWMakecfg.m文件,并且您希望在代码生成期间生成的Makefile中添加这些依赖项。

注意:仅当您将在加速模式下模拟模型时才完成此步骤。

Legacy_code('RTWMAKECFG_GENERY',def);

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

编译C-MEX S函数源后,可以使用第一个输入设置为“slblock_generate”来调用函数legacy_code(),以便生成被配置为调用该函数的屏蔽的S函数块。该块放置在一个新模型中,可以复制到现有模型。

%Legacy_code('slblock_generate',def);

与遗留代码集成

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

Open_System('sldemo_lct_cpp')SIM('sldemo_lct_cpp');

也可以看看