主要内容

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

此示例演示如何使用遗留代码工具使用Simulink®总线将遗留C函数与结构参数集成。万博1manbetx

Legacy Code Tool允许您:

  • 提供遗留功能规范,

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

  • 编译并构建生成的S函数以进行模拟。

提供遗留功能规范

遗留代码工具提供的函数以特定的数据结构或结构数组作为参数。通过调用函数Legacy_Code()初始化数据结构使用“initialize”作为第一个输入。初始化结构后,必须将其属性分配给与要集成的旧代码相对应的值。本例中调用的旧函数的原型为:

计数器总线FCN(计数器总线*u1、int32_T u2、计数器总线*y1、int32_T*y2)

其中,COUNTERBUS是中定义的结构类型def柜台巴士并在基本工作区中使用Simulink.Bus对万博1manbetx象实现。遗留源代码可在文件中找到柜台巴士柜台巴士。要打开模型和文件,请单击开放模式.

埃瓦林(“基地”,'加载sldemo\u lct\u data.mat')% sldemo_sfun_counterbusdef = legacy_code (“初始化”);def.SFunctionName=“sldemo\u sfun\u计数器总线”;def.OutputFcnSpec ='无效计数器总线FCN(计数器总线u1[1],int32 u2,计数器总线y1[1],int32 y2[1])';定义头文件={“counterbus.h”}; def.SourceFiles={“counterbus.c”};def.IncPaths = {“sldemo\U lct\U src”};def.SrcPaths = {“sldemo\U lct\U src”};

生成和编译S函数以在模拟过程中使用

再次调用函数legacy_code(),将第一个输入设置为“generate_for_sim”,以便根据输入参数“def”提供的描述自动生成和编译C-MEX S函数。此S函数用于在模拟中调用遗留函数。S函数的源代码可在文件中找到sldemo\u sfun\u计数器总线.c.

旧式代码(“为sim卡生成sim卡”,def);
### Start compilation sldemo_sfun_counterbus ('-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/tpcbaae323_f838_4ad6_bdb6_5f256f72b603', ', ')/tmp/Bdoc21a_1606923_226400/tp2ef37ed0/ex39753963/sldemo_lct_src/counterbus.c墨西哥人成功完成。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')墨西哥人成功完成。###完成sldemo_sfun_counterbus的编译

生成用于代码生成的rtwmakecfg.m文件

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

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

旧式代码(“rtwmakecfg_生成”,def);

生成用于调用生成的S函数的屏蔽S函数块

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

% legacy_code (slblock_generate, def);

集成遗留代码

模型sldemo\U lct\U总线显示与遗留代码的集成。子系统TestCounter用作调用遗留C函数的工具。

open_system (“sldemo\U lct\U总线”)开放式系统(“sldemo_lct_bus / TestCounter”)开放式系统(“sldemo_lct_bus / ScopeA”)开放式系统(“sldemo_lct_bus / ScopeA1”)模拟(“sldemo\U lct\U总线”)
ans=Si万博1manbetxmulink.SimulationOutput:ScopeDataA:[301x4双精度]ScopeDataA1:[301x4双精度]tout:[301x1双精度]模拟元数据:[1x1 Simulink.SimulationMetadata]错误消息:[0x0字符]

另见