本示例向您展示了如何使用遗留代码工具使用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.h
和counterbus.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”};
在第一个输入集为'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 ###退出
创建TLC块文件后,可以再次调用函数legacy_code(),第一个输入设置为'rtwmakecfg_generate',以生成一个rtwmakecfg。支持通过Simuli金宝appnk®Coder™生成代码。金宝app生成rtwmakecfg。如果s -函数所需的源文件和头文件与s -函数不在同一个目录中,并且您希望在代码生成过程中生成的makefile中添加这些依赖项。
注意:只有当您要在加速模式下模拟模型时,才需要完成此步骤。
legacy_code (“rtwmakecfg_generate”def);
编译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]