编写完全内联的 S

您所在的位置:网站首页 matlab的legend命令 编写完全内联的 S

编写完全内联的 S

2023-07-05 17:15| 来源: 网络整理| 查看: 265

编写完全内联的 S-Function

完全内联的 S-Function 将您的算法(模块)嵌入到生成的代码中,您不能将其与内置模块区分开来。通常,完全内联的 S-Function 需要实现两次算法:一次针对 Simulink 模型 (C/C++ MEX S-Function),一次针对代码生成(TLC 文件)。

使用编写包装器 S-Function 和 TLC 文件中的示例,您可以通过在 wrapsfcn.tlc 中指定显式代码(即 2.0 * u)完全消除对 my_alg 的调用。虽然这样可以提高性能,但如果您要处理大量 C/C++ 代码,这项任务可能很耗时。您还必须在两个地方维护算法:C/C++ S-Function 本身和对应的 TLC 文件。需要考虑所得到的性能增益能否大于它的弊端。要内联本示例中使用的算法,则在 wrapsfcn.tlc 文件的 Outputs 部分,请不要编写:

% = my_alg(%);

使用...

% = 2.0 * %;

以下代码是 mdlOutputs 中生成的代码:

void mdlOutputs(int_T tid) { /* Sin Block: /Sin */ rtB.Sin = rtP.Sin.Amplitude * sin(rtP.Sin.Frequency * ssGetT(rtS) + rtP.Sin.Phase); /* S-Function Block: /S-Function */  rtB.S_Function = 2.0 * rtB.Sin; /* Explicit embedding of algorithm */ /* Outport Block: /Out */ rtY.Out = rtB.S_Function; }

Target Language Compiler 使用算法本身代替对 my_alg 的调用。

多端口 S-Function

更高级的多端口内联 S-Function 示例是 sfun_multiport.c 和 sfun_multiport.tlc。此 S-Function 说明如何为包含多个端口的 S-Function 创建完全内联的 TLC 文件。

编写内联 S-Function 的规范

考虑使用模块属性 RTWdata(请参阅S-Function RTWdata)。此属性是可与模块关联的字符向量结构体。代码生成器将此结构体与模型一起保存在 model.rtw 文件中,并使 .rtw 文件更易于阅读。例如,在 MATLAB 命令行窗口中,假设您输入以下命令:

mydata.field1 = 'information for field1'; mydata.field2 = 'information for field2'; set_param(sfun_block, 'RTWdata', mydata);

代码生成器为模块生成的 .rtw 文件包含结构体 mydata 中指定的注释。

考虑使用 mdlRTW 函数在生成的代码中内联 C MEX S-Function 以用于以下目的:

重命名生成的代码中的可调参数。

在 TLC 文件中引入不可调参数。

相关主题Write Fully Inlined S-Functions with mdlRTW Routine


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3