文档

使用带有结构参数的遗留函数的总线

这个例子向您展示了如何使用遗留代码工具来使用Simulink®总线集成遗留C函数和结构参数。金宝app

Legacy Code Tool允许您:

  • 提供遗留功能规范,

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

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

提供遗留功能规范

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

counterbusFcn(COUNTERBUS *u1, int32_T u2, COUNTERBUS *y1, int32_T *y2)

其中COUNTERBUS是一个struct类型定义counterbus.h并用Simulink实现。金宝app基本工作区中的总线对象。遗留的源代码可以在这些文件中找到counterbus.h,counterbus.c

evalin (“基地”“负载sldemo_lct_data.mat”% sldemo_sfun_counterbusdef = legacy_code (“初始化”);def.SFunctionName =“sldemo_sfun_counterbus”;def.OutputFcnSpec ='void counterbusFcn(COUNTERBUS u1[1], int32 u2, COUNTERBUS y1[1], int32 y2[1])';def.HeaderFiles = {“counterbus.h”};def.SourceFiles = {“counterbus.c”};def.IncPaths = {“sldemo_lct_src”};def.SrcPaths = {“sldemo_lct_src”};

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

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

legacy_code (“generate_for_sim”def);
# # #开始编译sldemo_sfun_counterbus墨西哥人(“我/ mathworks猛击/棒/ Bdoc19b /构建/ matlab工具箱/模型/ simdemos / simfeat金宝appures / sldemo_lct_src’,‘我/ tmp / Bdoc19b_1305395_49128 / tp0c36bc9b’,‘- c’,‘-outdir’,‘/ tmp / Bdoc19b_1305395_49128 / tp5edb5d79_221d_418d_ac56_cd03a9395e5e’,/mathworks/devel/bat/Bdoc19b/build/matlab/toolbox/s金宝appimulink/simdemos/simfeatures/sldemo_lct_src/counterbus.c墨西哥人成功完成。-I/tmp/Bdoc19b_1305395_49128/tp0c36bc9b', '/tmp/Bdoc19b_1305395_49128/tp5edb5d79_221d金宝app_418d_ac56_cd03a9395e5e/counterbus.o')使用gcc构建。墨西哥人成功完成。###完成sldemo_sfun_counterbus的编译

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

创建TLC块文件之后,可以再次调用函数legacy_code(),将第一个输入设置为'rtwmakecfg_generate',以生成rtwmakecfg。m文件支持通过Sim金宝appulink®Coder™生成代码。金宝app生成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_bus显示与遗留代码的集成。子系统TestCounter用作对遗留C函数调用的工具。

open_system (“sldemo_lct_bus”) open_system (“sldemo_lct_bus / TestCounter”) sim卡(“sldemo_lct_bus”
ans =仿金宝app真软件。SimulationOutput: ScopeDataA: [301x4 double] ScopeDataA1: [301x4 double] tout: [301x1 double] SimulationMetadata: [1x1 金宝appSimulink。SimulationMetadata]错误信息:[0x0 char]