主要内容

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

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

遗留代码工具允许您:

  • 提供遗留功能规范,

  • 生成一个C-MEX s函数,用于模拟调用遗留代码,以及

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

提供遗留功能规范

遗留代码工具提供的函数采用特定的数据结构或结构数组作为参数。通过使用'initialize'作为第一个输入调用函数legacy_code()来初始化数据结构。初始化结构后,必须将其属性分配给与集成的遗留代码对应的值。在这个例子中被调用的遗留函数的原型是:

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

其中COUNTERBUS是定义在counterbus.h并通过Simulink实现。金宝app基本工作区中的总线对象。遗留的源代码可以在文件中找到counterbus.hcounterbus.c.要打开模型和文件,单击开放式

evalin ('根据'“负载sldemo_lct_data.mat”%sldemo_sfun_counterbus.def = letacacy_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函数在仿真期间使用

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

legacy_code (“generate_for_sim”def);
###开始编译SLDEMO_SFUN_COUNTERBUS MEX(' -  I / TMP / BDOC21A_1606923_226400 / TP2EF37ED0 / EX39753963 / SLDEMO_LCT_SRC','-I / TMP / BDOC21A_1606923_226400 / TP2EF37ED0 / EX39753963','-C','-OUTDIR','/ TMP /bdoc21a_1606923_226400 / tpcbaae323_f838_4ad6_bdb6_5f256f72b603','/tmp/bdoc21a_1606923_226400/tp2ef37ed0/ex39753963/sldemo_lct_src/counterbus.c')建立'gcc'。MEX成功完成。MEX( 'sldemo_sfun_counterbus.c', '-I / TMP / Bdoc21a_1606923_226400 / tp2ef37ed0 / ex39753963 / sldemo_lct_src', '-I / TMP / Bdoc21a_1606923_226400 / tp2ef37ed0 / ex39753963', '/tmp/Bdoc21a_1606923_226400/tpcbaae323_f838_4ad6_bdb6_5f256f72b603/counterbus.o')建筑物用'gcc'。MEX成功完成。###完成编译sldemo_sfun_counterbus ###退出

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

创建TLC块文件后,可以再次调用函数legacy_code(),第一个输入设置为'rtwmakecfg_generate',以生成一个rtwmakecfg。支持通过Simuli金宝appnk®Coder™生成代码。金宝app生成rtwmakecfg。如果s -函数所需的源文件和头文件与s -函数不在同一个目录中,并且您希望在代码生成过程中生成的makefile中添加这些依赖项。

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

legacy_code (“rtwmakecfg_generate”def);

生成用于调用生成的s -函数的屏蔽s -函数块

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

%Legacy_code('slblock_generate',def);

集成遗留代码

该模型sldemo_lct_bus显示与遗留代码的集成。子系统TestCounter充当对遗留C函数调用的工具。

Open_System(“sldemo_lct_bus”) open_system ('sldemo_lct_bus / testcounter') open_system ('sldemo_lct_bus / scopea') open_system ('sldemo_lct_bus / scopea1') sim卡(“sldemo_lct_bus”
ans =仿金宝app真软件。SimulationOutput: ScopeDataA: [301x4 double] ScopeDataA1: [301x4 double] tout: [301x1 double] SimulationMetadata: [1x1 金宝appSimulink。ErrorMessage: [0x0 char]

另请参阅