从跨模型共享的库子系统生成可重用的代码
什么是可重用库子系统?
可重用库子系统是库中包含的子系统,该子系统被配置为可重用。您必须在库中定义子系统,并将其配置为可重用,以便跨模型重用子系统。
为了重用公共功能,你可以包含一个子系统的多个实例:
在单个模型中,它是顶层模型或模型引用层次结构的一部分
跨模型引用层次结构中的多个引用模型
跨越多个包含Model块的顶级模型
跨多个不包括模型块的顶级模型
代码生成器使用校验和来确定可重用性。在某些情况下,代码生成器不能重用子系统代码。
对于增量代码生成,如果可重用库子系统发生更改,将重新构建自身及其父子系统。在构建过程中,如果没有找到匹配的函数,则在共享实用程序文件夹中生成可重用函数的一个新实例。如果从以前的构建中找到不同的匹配函数,则使用该函数,并且不会发出新的可重用函数。
对于后续版本,不会从文件夹中替换或删除未使用的文件。在模型开发过程中,当共享工具文件夹中存在许多过时的共享函数时,您可以删除该文件夹并重新生成代码。如果可重用库子系统的所有实例都从模型引用层次结构中删除,并且您重新生成代码,那么过时的共享函数将保留在共享实用程序文件夹中,直到您删除它们。
如果模型发生了变化,从而可能导致子系统生成不同的代码,则会生成一个新的可重用函数。例如,即使可重用库子系统没有改变,修改代码注释的模型配置参数也可能导致子系统生成不同的代码。
嵌入式Coder用户可以从包含配置为可重用的子系统的库生成代码。有关更多信息,请参见基于库的可重用库子系统代码生成(嵌入式编码).
可重用库子系统代码放置和命名
可重用库子系统的生成代码独立于模型的生成代码。可重用库子系统的代码生成到共享实用程序文件夹,slprj /
,而不是模型引用层次结构文件夹。为支持类型生成的代码,这些类型生成到金宝app目标
/ _sharedutils.h
文件,也在共享工具文件夹。
对于唯一的命名,可重用函数名有一个校验和附加到可重用库子系统名。例如,子系统的代码和文件,魔法石,第1章
,链接到一个可重复使用的库子系统,RLS
,可能是:
函数名:
RLS_mgdjlngd
文件名称:
RLS_mgdjlnd.c
而且RLS_mgdjlnd.h
要配置一个可重用库子系统,请设置如下所示的子系统参数:
选择把它当作原子单位来对待.
在代码生成标签:
集函数包装来
可重用的功能
.设置函数名选项而且文件名选项基于该表的参数。此表总结了代码生成器如何生成代码,并突出显示了文件名选项使您能够从可重用的库子系统生成代码。为了该表的目的,假设子系统块被命名
mySubsystem
和文件名称
的值。用户指定的
选择是myFunction
.函数名称选项 文件名选项 生成的文件夹位置 生成的函数名称 生成的文件名 汽车
汽车
/ slprj /目标/ _sharedutils
mySubsystem_校验和
mySubsystem_校验和.c
,mySubsystem_校验和.h
使用子系统名称
/ slprj /目标/ _sharedutils
mySubsystem_校验和
mySubsystem_校验和.c
,mySubsystem_校验和.h
使用函数名
/ slprj /目标/ _sharedutils
mySubsystem_校验和
mySubsystem_校验和.c
,mySubsystem_校验和.h
用户指定的
model_target_rtw
模型_Subsystem
myFile.h
使用子系统名称
汽车
model_target_rtw
模型_Subsystem
生成的代码包含在 模型.h
使用子系统名称
/ slprj /目标/ _sharedutils
mySubsystem_校验和
mySubsystem_校验和.c
,mySubsystem_校验和.h
使用函数名
/ slprj /目标/ _sharedutils
mySubsystem_校验和
mySubsystem_校验和.c
,mySubsystem_校验和.h
用户指定的
model_target_rtw
模型_Subsystem
myFile.h
用户指定的
汽车
(该规范只支持模型中子系统的一个惟一实例。)金宝app/ slprj /目标/ _sharedutils
myFunction
myFunction.c, myFunction.h
使用子系统名称
model_target_rtw
myFunction
mySubsystem.c, mySubsystem.h
使用函数名
(该规范只支持模型中子系统的一个惟一实例。)金宝app/ slprj /目标/ _sharedutils
myFunction
myFunction.c, myFunction.h
用户指定的
(如果用户指定的函数名和文件名相同,并且模型中金宝app的子系统只有一个惟一实例,则支持此规范。)/ slprj /目标/ _sharedutils
myFunction
myFunction.c, myFunction.h
有关子系统块参数的更多信息,请参见子系统.
配置包含可重用库子系统的模型
对于使用可重用库子系统的模型,您必须根据模型是参考模型还是顶级模型不同地配置模型。如果子系统处于引用模型层次结构中,则设置配置参数,共享代码放置来汽车
.否则,对于使用子系统的每个模型,设置模型配置参数共享代码放置来共享位置
.
如果可重用库子系统使用共享的本地数据存储,并且为模型数据元素配置默认映射,则将默认存储类映射保留为类别共享本地数据存储设置为默认的.
在模型引用层次结构中,如果可重用库子系统的实例在顶层模型中,则在模型参考窗格的“配置参数”对话框中,必须选择按值传递固定大小的标量根输入用于代码生成参数。如果您没有选择该参数,将为顶级模型中的可重用库子系统实例生成一个单独的共享函数,并为引用模型中的实例生成一个可重用函数。
如果可重用库子系统连接到根输出端口,那么未连接到根输出端口的相同子系统就不会发生重用。但是,您可以设置传递可重用的系统输出为来个人观点
在优化窗格,以确保在这些子系统之间进行重用。此参数需要一个嵌入式编码器®许可证。
有关创建库的详细信息,请参见自定义库.有关创建可重用库子系统的示例,请参见为跨模型共享的子系统生成可重用代码.
为跨模型共享的子系统生成可重用代码
这个示例展示了如何配置可重用库子系统,并为跨引用模型共享的子系统生成可重用函数。结果是子系统的可重用代码,生成到共享实用程序文件夹(slprj /
).目标
/ _sharedutils
创建一个可重用的库子系统。
在Simuli金宝appnk编辑器中模拟选项卡上,选择新建>库.选择空白的图书馆从“Simulin金宝appk开始页”窗口。开放
rtwdemo_ssreuse
复制和粘贴子系统魔法石,第1章
进入库编辑器。此操作加载的变量魔法石,第1章
进入基本工作区。将子系统块重命名为RLS
.单击子系统块并按下Ctrl + U查看子系统的内容
RLS
.要配置子系统,请在Library编辑器中右键单击
RLS
.在上下文菜单中,选择块参数(子系统).在“子系统参数”对话框中,选择以下选项:选择把它当作原子单位来对待.
在代码生成标签:
集函数包装来
可重用的功能
.集函数名选项来
用户指定的
并验证函数名设置为myfun
.集文件名选项来
汽车
.
点击应用而且好吧.
将可重用库保存为
ssreuselib
,它会创建一个文件,ssreuselib.slx
.
创建示例模型。
的一个实例创建一个模型
RLS
从ssreuselib
.命名这个子系统魔法石,第1章
.添加另一个子系统并命名它SS2
.命名模型ex_model1
.的一个实例创建另一个模型
RLS
从ssreuselib
.命名这个子系统魔法石,第1章
.添加另一个子系统并命名它SS3
.命名模型ex_model2
.用两个模型块创建一个顶层模型
ex_model1
而且ex_model2
.保存顶部模型为ex_mdlref_ssreuse
.
配置top型号的配置参数。
与模型
ex_mdlref_ssreuse
在Simulink中打开金宝app®编辑,在C代码选项卡上,单击设置打开“配置参数”对话框。在解算器窗格中,指定类型作为
固定步
.在模型参考窗格中,单击省略号可查看高级参数。然后,选择按值传递固定大小的标量根输入用于代码生成.
在代码生成>报表窗格中,选择创建代码生成报告而且自动打开报表.
在代码生成>接口窗格中,设置共享代码放置来
共享位置
.在代码生成>标识符窗格中,设置最大标识符长度来
256
.该步骤是可选的。点击应用而且好吧.
创建并传播配置引用。
在Simuli金宝appnk编辑器中建模选项卡上,单击模型浏览器以打开模型资源管理器。在模型资源管理器的左侧导航列中,展开
ex_mdlref_ssreuse
节点。选项下面的Configurations节点
ex_mdlref_ssreuse
节点。在内容窗格中,右键单击配置并选择转换为配置参考
.在“将活动配置转换为引用”对话框中,单击好吧.该操作将模型配置集转换为配置引用,
金宝app仿真软件。ConfigSetRef
,并创建配置引用对象,configSetObj
,在基本工作区中。在左侧导航列中,右键单击引用(主动)并选择
传播到引用模型
.在“配置引用传播到引用模型”对话框中,选择列表中的引用模型。点击传播.
现在,顶部模型和参考模型使用相同的配置参考,引用(主动)
,它指向一个模型配置引用对象,configSetObj
,在基本工作区中。保存模型时,还需要导出configSetObj
到mat文件。
生成并查看代码。
要生成代码,请在Simulink编辑器中按金宝appCtrl + B.代码生成后,将打开代码生成报告。
要查看引用模型的代码生成报告,请在左侧导航窗格中引用模型部分中,选择
ex_model1
.代码生成报告显示所生成的文件ex_model1
.在左侧导航窗格中,展开共享文件.代码生成器使用可重用的库子系统名称。子系统代码
魔法石,第1章
是在myfun.c
而且myfun.h
.点击回来并导航到
ex_model2
代码生成报告。ex_model2
使用相同的源代码,myfun.c
而且myfun.h
的代码ex_model1
.您的子系统功能和文件名将不同。
相关的话题
- 自定义库
- 从子系统生成可重入代码(嵌入式编码)
- 将子系统代码生成为独立的函数和文件