完全内联的s -函数将算法(块)构建到生成的代码中,您无法将其与内置的代码块区分开来。通常,一个完全内联的s函数需要您实现算法两次:一次用于Simulink模型(C/ c++ MEX s函数),一次用于代码生成(TLC文件)。金宝app
使用编写包装器S-Function和TLC文件(金宝appSimulink Coder),您可以消除调用my_alg
完全通过指定显式代码(即,2.0 * u
)wrapsfcn.tlc
.虽然这可以提高性能,但如果您正在处理大量的C/ c++代码,任务可能会很长。您还必须在两个地方维护您的算法,C/ c++ s -函数本身和相应的TLC文件。考虑性能增益是否可能超过缺点。要内联本例中使用的算法,请在输出
你的节wrapsfcn.tlc
文件,而不是写:
% < y > = my_alg (% u > <);
使用:
%= 2.0 * %;
这个代码是在mdlOutputs
:
void mdlOutputs(int_T tid) {/* Sin Block:/Sin */ rtB. txt;rtP.Sin.振幅* Sin (rtP.Sin. Sin。频率* ssGetT(rtS) + rtP.Sin.Phase);/* S-Function Block: /S-Function */ rtB. txt;S_Function = 2.0 * rtB.Sin;/*显式嵌入算法*//* Outport Block: /Out */ rtY. txt;= rtB.S_Function;}
目标语言编译器替换调用my_alg
算法本身。
一个更高级的多端口内联s函数示例是sfun_multiport.c
和sfun_multiport.tlc
.这个s函数演示了如何为包含多个端口的s函数创建一个完全内联的TLC文件。
考虑使用block属性RTWdata
(见s函数RTWdata(金宝app仿真软件编码器))。这个属性是一个可以与块关联的字符向量结构。代码生成器将结构和模型保存在
文件,并创建模型
.rtw.rtw
文件可读性更强。例如,在MATLAB命令窗口中,假设你输入以下命令:
mydata。field1 =“field1信息”;mydata。field2 =“field2信息”;set_param (sfun_block“RTWdata”, mydata);
的.rtw
代码生成器为块生成的文件包括结构中指定的注释mydata
.
考虑使用mdlRTW
函数将您的C MEX s -函数内联到生成的代码中:
在生成的代码中重命名可调参数。
在TLC文件中引入不可调优参数。