主要内容

C ++对象方法作为旧功能

此示例向您展示了如何使用旧版代码工具来集成旧版C ++对象方法。

旧版代码工具允许您:

  • 提供旧功能规范,

  • 生成一个C ++ MEX S函数,该功能在模拟过程中用于调用旧代码,并且

  • 编译并构建生成的S功能以进行仿真。

提供旧功能规范

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

类加法器{private:int int_state;公共:adder();int add_one(int增量);int get_val();};

遗产源代码在文件中找到adder_cpp.hadder_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功能以供使用

将第一个输入设置为“ generate_for_sim”再次调用函数lecacy_code(),以根据输入参数“ def”提供的描述自动生成和编译C-Mex s功能。此S功能用于调用模拟中的旧功能。在文件中找到S功能的源代码sldemo_sfun_adder_cpp.cpp

legacy_code('generate_for_sim',def);
### Start Compiling sldemo_sfun_adder_cpp mex('-I/tmp/Bdoc21b_1757077_93802/tp5a273ed9/ex93865240/sldemo_lct_src', '-I/tmp/Bdoc21b_1757077_93802/tp5a273ed9/ex93865240', '-c', '-outdir', '/tmp/Bdoc21b_1757077_93802/tpb2859e4c_6391_451b_952b_eaf0a0a6336c', '/tmp/Bdoc21b_1757077_93802/tp5a273ed9/ex93865240/sldemo_lct_src/adder_cpp.cpp') Building with 'g++'.MEX成功完成。mex('sldemo_sfun_adder_cpp.cpp', '-I/tmp/Bdoc21b_1757077_93802/tp5a273ed9/ex93865240/sldemo_lct_src', '-I/tmp/Bdoc21b_1757077_93802/tp5a273ed9/ex93865240', '-cxx', '/tmp/Bdoc21b_1757077_93802/tpb2859e4c_6391_451b_952b_eaf0a0a6336c/adder_cpp.o')用“ G ++”建筑物。MEX成功完成。###完成编译SLDEMO_SFUN_ADDER_CPP ###退出

生成一个用于代码生成的RTWMAKECFG.M文件

创建TLC块文件后,可以将第一个输入设置为“ rtwmakecfg_generate”再次调用函数lecacy_code(),以生成rtwmakecfg.m文件以通过Simulink®Coder™支持代码生成。金宝app金宝app如果S-函数的所需源和标头文件与S-函数的目录不同,则生成RTWMAKECFG.M文件,并且您想在代码生成过程中生成的makefile中添加这些依赖项。

注意:仅当您要以加速模式模拟模型时,才能完成此步骤。

legacy_code('rtwmakecfg_generate',def);

生成蒙版的S功能块,用于调用生成的S功能

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

%lectacy_code('slblock_generate',def);

与传统代码集成

该模型sldemo_lct_cpp sldemo_lct_cpp显示与旧版代码的集成。

open_system('sldemo_lct_cpp')SIM('sldemo_lct_cpp');

也可以看看