文档

遗留函数参数的继承信号维数

这个例子向您展示了如何使用遗留代码工具来集成其参数继承了维的遗留C函数。

Legacy Code Tool允许您:

  • 提供遗留功能规范,

  • 生成一个C-MEX s -函数,该函数在模拟过程中用于调用遗留代码

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

提供遗留功能规范

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

  • void mat_add(real_T *u1, real_T *u2, int32_T nbRows, 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

def = [];% sldemo_sfun_mat_adddef = legacy_code (“初始化”);def.SFunctionName =“sldemo_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 = {“sldemo_lct_src”};def.SrcPaths = {“sldemo_lct_src”};def = [def;def);% sldemo_sfun_mat_multdef = legacy_code (“初始化”);def.SFunctionName =“sldemo_sfun_mat_mult”;def.OutputFcnSpec = ['void mat_mult(double u1[p1][p2], double u2[p2][p3], ')...` int32 p1, int32 p2, int32 p3, double y1[p1][p3]) `];def.HeaderFiles = {“mat_ops.h”};def.SourceFiles = {“mat_ops.c”};def.IncPaths = {“sldemo_lct_src”};def.SrcPaths = {“sldemo_lct_src”};def = [def;def);

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

再次调用函数legacy_code(),将第一个输入设置为'generate_for_sim',以便根据输入参数'defs'提供的描述自动生成和编译C-MEX s -函数。该s函数用于在仿真中调用遗留函数。s函数的源代码可以在文件中找到sldemo_sfun_mat_add.csldemo_sfun_mat_mult.c

legacy_code (“generate_for_sim”def);
###开始编译sldemo_sfun_mat_add mex('-I/mathworks/devel/bat/BR2018ad/build/matlab/toolbox/simulink/simd万博1manbetxemos/simfeatures/sldemo_lct_src', '-I/tmp/BR2018ad_802882_51908/publish_examples1/tp62c72df9', '-c', '-outdir', '/tmp/BR2018ad_802882_51908/publish_examples1/tpd6860f35_2876_4994_8f26_b7aa13819028', '),'/mathworks/devel/bat/BR2018ad/build/matlab/toolbox/万博1manbetxsimulink/simdemos/simfeatures/sldemo_lct_src/mat_ops.c')使用gcc构建。墨西哥人成功完成。墨西哥人(“sldemo_sfun_mat_add.c”、“我/ mathworks猛击/棒/ BR2018ad /构建/ matlab工具箱/模型/ simdemo万博1manbetxs / simfeatures / sldemo_lct_src’,‘我/ tmp / BR2018ad_802882_51908 / publish_examples1 tp62c72df9 ', ' / tmp / BR2018ad_802882_51908 / publish_examples1 / tpd6860f35_2876_4994_8f26_b7aa13819028 / mat_ops.o”)建设与gcc。墨西哥人成功完成。### # Start compilation sldemo_sfun_mat_mult ('-I/mathworks/devel/bat/BR2018ad/build/matlab/toolbox/simulink/simdemos/simfeatures/sldemo_lct_src', '-万博1manbetxI/tmp/BR2018ad_802882_51908/publish_examples1/tp62c72df9', '-c', '-outdir', '- t ', '- t ', '- t ', '- t ', '- t ')/tmp/BR2018ad_802882_51908/publish_examples1/tpf3e8e4d0_c08d_4631_af5f_145d23527ed8', '/mathworks/devel/bat/BR2018ad/build/matlab/toolbox/s万博1manbetximulink/simdemos/simfeatures/sldemo_lct_src/mat_ops.c')墨西哥人成功完成。墨西哥人(“sldemo_sfun_mat_mult.c”、“我/ mathworks猛击/棒/ BR2018ad /构建/ matlab工具箱/模型/ simdemo万博1manbetxs / simfeatures / sldemo_lct_src’,‘我/ tmp / BR2018ad_802882_51908 / publish_examples1 tp62c72df9 ', ' / tmp / BR2018ad_802882_51908 / publish_examples1 / tpf3e8e4d0_c08d_4631_af5f_145d23527ed8 / mat_ops.o”)建设与gcc。墨西哥人成功完成。 ### Finish Compiling sldemo_sfun_mat_mult ### Exit

生成一个rtwmakecfg。m用于代码生成的文件

创建TLC块文件之后,可以再次调用函数legacy_code(),将第一个输入设置为'rtwmakecfg_generate',以生成rtwmakecfg。m文件支持通过Sim万博1manbetxulink®Coder™生成代码。万博1manbetx生成rtwmakecfg。如果S-functions所需的源文件和头文件不在与S-functions相同的目录中,并且您希望在代码生成期间生成的makefile中添加这些依赖项。

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

legacy_code (“rtwmakecfg_generate”def);

生成蒙面s函数块,用于调用生成的s函数

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

% legacy_code (slblock_generate, def);

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

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

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

这个话题有用吗?