文档

遗留函数中的多维信号

这个例子向您展示了如何使用遗留代码工具来集成遗留C函数和多维信号。

Legacy Code Tool允许您:

  • 提供遗留功能规范,

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

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

提供遗留功能规范

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

void array3d_add(real_T *y1, real_T *u1, real_T *u2, int32_T nbRows, int32_T nbCols, int32_T nbPages);

其中real_T是对double的类型定义,int32_T是对32位整数的类型定义。遗留的源代码可以在这些文件中找到ndarray_ops.h,ndarray_ops.c

% sldemo_sfun_ndarray_adddef = legacy_code (“初始化”);def.SFunctionName =“sldemo_sfun_ndarray_add”;def.OutputFcnSpec = [空白array3d_add(双y₁[大小(u1, 1)][大小(u1, 2)][大小(u1, 3)],”...'双u1[][][],双u2[][][]...'int32 size(u1,1), int32 size(u1,2), int32 size(u1,3))'];def.HeaderFiles = {“ndarray_ops.h”};def.SourceFiles = {“ndarray_ops.c”};def.IncPaths = {“sldemo_lct_src”};def.SrcPaths = {“sldemo_lct_src”};

其中,y1是一个三维输出信号,其维数与三维输入信号u1相同。注意,传递给遗留函数的最后3个参数对应于3- d输入信号u1每个维度的元素数。

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

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

legacy_code (“generate_for_sim”def);
###开始编译sldemo_sfun_ndarray_add mex('-I/mathworks/devel/bat/BR2018ad/build/matlab/toolbox/simulink/simd万博1manbetxemos/simfeatures/sldemo_lct_src', '-I/tmp/BR2018ad_802882_51908/publish_examples3/tp4a7c15ec', '-c', '-outdir', '/tmp/BR2018ad_802882_51908/publish_examples3/tp74b55bef_bad1_4513_98f4_b27abb0b4056', '),'/mathworks/devel/bat/BR2018ad/build/matlab/toolbox/万博1manbetxsimulink/simdemos/simfeatures/sldemo_lct_src/ ndarray_os .c')使用gcc构建。墨西哥人成功完成。墨西哥人(“sldemo_sfun_ndarray_add.c”、“我/ mathworks猛击/棒/ BR2018ad /构建/ matlab工具箱/模型/ simdemo万博1manbetxs / simfeatures / sldemo_lct_src’,‘我/ tmp / BR2018ad_802882_51908 / publish_examples3 tp4a7c15ec ', ' / tmp / BR2018ad_802882_51908 / publish_examples3 / tp74b55bef_bad1_4513_98f4_b27abb0b4056 / ndarray_ops.o”)建设与gcc。墨西哥人成功完成。###完成sldemo_sfun_ndarray_add的编译

生成一个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_ndarray显示与遗留代码的集成。子系统ndarray_add可以作为对遗留C函数调用的工具。

open_system (“sldemo_lct_ndarray”) open_system (“sldemo_lct_ndarray / ndarray_add”) sim卡(“sldemo_lct_ndarray”

这个话题有用吗?