文件

从遗留函数返回参数传递的输出

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

Legacy Code Tool允许您:

  • 提供遗留功能规范,

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

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

提供遗留功能规范

遗留代码工具提供的函数以特定的数据结构或结构数组作为参数。通过使用initialize作为第一个输入调用函数legacy_code()来初始化数据结构。在初始化结构之后,您必须将其属性赋给与集成的遗留代码相对应的值。有关属性的详细帮助,请致电Legacy_code('help')。在此示例中调用遗留功能的原型是:

Flt Gaintcalar(Const Flt In,Const Flt Gain)

Flt是漂浮的typedef。在文件中找到了遗留源代码your_types.h收益,gainscalar.c.

% sldemo_sfun_gain_scalardef = legacy_code (“初始化”);def.sfunctionname =.'sldemo_sfun_gain_scalar';def.OutputFcnSpec ='single y1 = gainScalar(single u1, single p1)';def.headerfiles = {'Gain.h'};def.sourcefiles = {'gainscalar.c'};def.incpaths = {'sldemo_lct_src'};def.SrcPaths = {'sldemo_lct_src'};

生成和编译S函数以在仿真期间使用

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

lefacy_code('generate_for_sim',def);
###开始编译SLDEMO_SFUN_GAIN_SCALAR MEX(' -  I / MATHWORKS / DEVEL / BAT / BDOC19B / BUILD / MATLAB / TOOL金宝appBOX / SIMDEMOS / SIMFEATURES / SIMFEATURE / SLDEMO_LCT_SRC','-I / TMP / BDOC19B_1305395_49479 / TP0AF0A780','-C'那'-outdir', '/tmp/Bdoc19b_1305395_49479/tpcbb98af6_704c_402e_ab5a_75e952f45a89', '/mathworks/devel/bat/Bdoc19b/build/matlab/toolbox/simulink/simdemos/simfeatures/sldemo_lct_src/gainScalar.c') Building with 'gcc'. MEX completed successfully. mex('sldemo_sfun_gain_scalar.c', '-I/mathworks/devel/bat/Bdoc19b/build/matlab/toolbox/simulink/simdemos/simfeatures/sldemo_lct_src', '-I/tmp/Bdoc19b_1305395_49479/tp0af0a780', '/tmp/Bdoc19b_1305395_49479/tpcbb98af6_704c_402e_ab5a_75e952f45a89/gainScalar.o') Building with 'gcc'. MEX completed successfully. ### Finish Compiling sldemo_sfun_gain_scalar ### Exit

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

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

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

lefacy_code('rtwmakecfg_generate',def);

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

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

% legacy_code (slblock_generate, def);

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

该模型sldemo_lct_gain.显示与遗留代码的集成。子系统TestGain用于通过生成s函数调用遗留C函数。

如果isempty (find_system (“SearchDepth”,0,'姓名''sldemo_lct_gain'))Open_System('sldemo_lct_gain')Open_System('sldemo_lct_gain / testgain')sim('sldemo_lct_gain');结尾