这个示例展示了如何配置原子子系统以生成可重用代码。要指定为子系统生成的代码作为原子单元执行,请在“块参数”对话框中选择当作原子单位对待参数。该参数启用函数包装的参数代码生成选项卡。的函数包装参数有以下四种设置:
内联
:内联子系统代码
那种一次性的功能
:函数将I/O作为全局数据传递
可重用的功能
:作为函数参数传递I/O的函数
汽车
:让Simu金宝applink Coder基于上下文进行优化
的可重用的功能
和汽车
设置允许代码生成器重用子系统代码。的可重用的功能
和那种一次性的功能
设置启用函数名的选择,函数名,文件名称选项参数。
如果您有Embedded Coder许可证,您可以配置一个不可重用的子系统来接受参数。
的rtwdemo_ssreuse
模型包含两个相同的子系统,魔法石,第1章
和SS2
.对于这些子系统,函数包装参数设置为可重用的
函数
,函数名参数是myfun
.子系统是参数化的屏蔽子系统。要查看被屏蔽子系统的内容,右键单击子系统块并选择面具>看下面具.
模型=“rtwdemo_ssreuse”;open_system(模型);
为构建和检查过程创建一个临时文件夹。打开金宝app仿真软件编码器或嵌入式编码器然后,生成并检查代码。
currentDir = pwd;[~, cgDir] = rtwdemodir ();rtwbuild(模型)
###成功完成rtwdemo_ssreuse的构建过程:模型重建行动的原因 ================================================================================================ rtwdemo_ssreuse代码生成和编译代码生成信息文件不存在。1个模型建立(0个模型已经更新)建立时间:0小时0米15.891秒
用= fullfile (cgDir,“rtwdemo_ssreuse_grt_rtw”,“rtwdemo_ssreuse.c”);rtwdemodbtype(用“/ *模型步骤”,/ *初始化模型的1 0);
/* Model step function */ void rtwdemo_ssreuse_step(void) {/* Outputs for Atomic SubSystem: '/SS1' */ /* import: ' /In1' includes: * import: ' /In2' */ myfun(rtwdemo_ssreuse_U. aspx);三机一体,rtwdemo_ssreuse_U。In2 &rtwdemo_ssreuse_B。魔法石,第1章,rtwdemo_ssreuse_P。T1Data,rtwdemo_ssreuse_P.T1Break); /* End of Outputs for SubSystem: ' /SS1' */ /* Outport: ' /Out1' */ rtwdemo_ssreuse_Y.Out1 = rtwdemo_ssreuse_B.SS1.LookupTable; /* Outputs for Atomic SubSystem: ' /SS2' */ /* Inport: ' /In1' incorporates: * Inport: ' /In2' */ myfun(rtwdemo_ssreuse_U.In1, rtwdemo_ssreuse_U.In2, &rtwdemo_ssreuse_B.SS2, rtwdemo_ssreuse_P.T2Data, rtwdemo_ssreuse_P.T2Break); /* End of Outputs for SubSystem: ' /SS2' */ /* Outport: ' /Out2' */ rtwdemo_ssreuse_Y.Out2 = rtwdemo_ssreuse_B.SS2.LookupTable; }
在模型步骤函数中,有两个对可重用函数的调用,myfun
.掩模参数,T1Break
,T1Data
,T2Break
,T2Data
为函数参数。
改变函数包装参数内联
.
set_param (“rtwdemo_ssreuse(魔法石,第1章”,“RTWSystemCode”,“内联”) set_param (“SS2 rtwdemo_ssreuse /”,“RTWSystemCode”,“内联”)
生成并检查代码。
rtwbuild(模型)
# # #开始构建过程:rtwdemo_ssreuse # # #成功完成构建过程:rtwdemo_ssreuse模型建立目标:总结构建模型重建行动的理由 =============================================================================== rtwdemo_ssreuse代码生成和编译生成的代码是过时了。建造时间:0小时0米11.06秒
用= fullfile (cgDir,“rtwdemo_ssreuse_grt_rtw”,“rtwdemo_ssreuse.c”);rtwdemodbtype(用“/ *模型步骤”,/ *初始化模型的1 0);
/*模型步长函数*/ void rtwdemo_ssreuse_step(void) {real_T Out1_tmp;/* Outputs for Atomic SubSystem: '/SS2' */ /* Outputs for Atomic SubSystem: ' /SS1' */ /* Sum: ' /Sum' includes: * import: ' /In1' * import: ' /In2' * Sum: ' /Sum' */ Out1_tmp = rtwdemo_ssreuse_U. txt . txt . txt . txt . txt . txt。三机一体+ rtwdemo_ssreuse_U.In2;/* output for子系统:' /SS2' */ /* Outport: ' /Out1'合并:* Lookup_n-D: ' /Lookup Table' * Sum: ' /Sum' */ rtwdemo_ssreuse_Y. txt 'Out1 = look1_binlx(Out1_tmp, rtwdemo_ssreuse_P。T1Break rtwdemo_ssreuse_P。T1Data 10 u);/* output for SubSystem: ' /SS1' */ /* Outputs for Atomic SubSystem: ' /SS2' */ /* Outport: ' /Out2' includes: * Lookup_n-D: ' /Lookup Table' */ rtwdemo_ssreuse_Y. txt . txt . txt . txt . txt . txt . txt . txt . txt . txt . txt . txt . txt . txt . txt . txt。Out2 = look1_binlx(Out1_tmp, rtwdemo_ssreuse_P。T2Break rtwdemo_ssreuse_P。T2Data 10 u);/*子系统输出结束:' /SS2' */}
在模型步骤函数中,子系统代码是内联的。
改变函数包装参数那种一次性的功能
.为SS2
,改变函数名参数myfun2
.
set_param (“rtwdemo_ssreuse(魔法石,第1章”,“RTWSystemCode”,“那种一次性函数”) set_param (“SS2 rtwdemo_ssreuse /”,“RTWSystemCode”,“那种一次性函数”) set_param (“SS2 rtwdemo_ssreuse /”,“RTWFcnName”,“myfun2”)
生成并检查代码。
rtwbuild(模型)
# # #开始构建过程:rtwdemo_ssreuse # # #成功完成构建过程:rtwdemo_ssreuse模型建立目标:总结构建模型重建行动的理由 =============================================================================== rtwdemo_ssreuse代码生成和编译生成的代码是过时了。建造时间:0小时0米11.085秒
用= fullfile (cgDir,“rtwdemo_ssreuse_grt_rtw”,“rtwdemo_ssreuse.c”);rtwdemodbtype(用“/ *模型步骤”,/ *初始化模型的1 0);
/* Model step函数*/ void rtwdemo_ssreuse_step(void){/*输出原子子系统:'/SS1' */ myfun();/* output for子系统:' /SS1' */ /* output for Atomic子系统:' /SS2' */ myfun2();/*子系统输出结束:' /SS2' */}
模型步骤函数包含对函数的调用myfun
和myfun2
.这些函数有一个void-void接口。
改变函数包装参数汽车
.
set_param (“rtwdemo_ssreuse(魔法石,第1章”,“RTWSystemCode”,“汽车”) set_param (“SS2 rtwdemo_ssreuse /”,“RTWSystemCode”,“汽车”)
为汽车
设置,Simuli金宝appnk Coder选择最佳格式。对于这个模型,最佳格式是可重用的功能。
关闭模型并清理。
bdclose rtwdemoclean(模型);cd (currentDir)