主要内容

生成代码中的函数重用

这个示例展示了如何配置原子子系统以生成可重用代码。要指定为子系统生成的代码作为原子单元执行,请在“块参数”对话框中选择当作原子单位对待参数。该参数启用函数包装的参数代码生成选项卡。的函数包装参数有以下四种设置:

  • 内联:内联子系统代码

  • 那种一次性的功能:函数将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.掩模参数,T1BreakT1DataT2Break,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' */}

模型步骤函数包含对函数的调用myfunmyfun2.这些函数有一个void-void接口。

改变函数包装参数汽车

set_param (“rtwdemo_ssreuse(魔法石,第1章”“RTWSystemCode”“汽车”) set_param (“SS2 rtwdemo_ssreuse /”“RTWSystemCode”“汽车”

汽车设置,Simuli金宝appnk Coder选择最佳格式。对于这个模型,最佳格式是可重用的功能。

关闭模型并清理。

bdclose rtwdemoclean(模型);cd (currentDir)