如果您希望使用自定义系统目标文件来构建具有引用模型的模型,则必须配置自定义系统目标文件以支持模型引用。金宝app
要构建引用其他模型的模型:
使用从GRT或ERT系统目标文件派生的自定义系统目标文件。
自定义系统目标文件必须声明模型参考合规 - 请参阅声明模型引用遵从性.
模板makefile必须定义一些支持模型引用的实体——参见金宝app提供TMF中的模型引用支持金宝app.
要为您的目标声明模型引用遵从性,您必须实现一个回调函数来设置ModelReferenceCompliniant.
标志,然后安装回调函数SelectCallback.
场的rtwgensettings
结构在系统目标文件中。当用户在系统目标文件浏览器中选择目标时,会触发回调函数。例如,下面的系统目标文件代码安装一个SelectCallback.
函数命名custom_select_callback_handler
:
RTWGenettings.SelectCallBack ='custom_select_callback_handler(hdlg,hsrc)';
对的论点SelectCallback.
功能 (HDLG.
,hSrc
)是回调API函数使用的私有数据句柄。这些句柄仅限于在系统目标文件回调函数中使用。它们应该不加修改地通过。
你的回调函数应该设置ModelReferenceCompliniant.
标志如下:
slConfigUISetVal(处理,hSrc ModelReferenceCompliant ', '对');slConfigUISetEnabled(处理、hSrc ModelReferenceCompliant,假);
如果您可以使用目标来构建包含大型模型参考层次结构的模型,请考虑配置目标以支持并行构建,如讨论金宝app通过使用并行构建减少引用模型的构建时间(金宝app仿真软件编码器)。
要为并行构建配置目标,回调函数还必须设置parmdlrefbuild替代方案
标志如下:
slconfiguisetval(hdlg,hsrc,'parmdlrefbuildcompliant','on');SLCONFIGUISETENABLED(HDLG,HSRC,'PARMDLREFBUILDCOMPLIST',FALSE);
有关系统目标文件回调API的更多信息,请参阅slConfigUIGetVal
,slconfiguisetenabled.
, 和slConfigUISetVal
功能参考页面。
为模型引用配置模板生成文件(TMF):
添加以下make变量和令牌,以便在生成makefile时展开:
| modelref_link_rspfile = |> modelref_link_rspfile_name <| relative_path_to_anchor = |> relative_path_to_anchor <| modelref_target_type = |> modelref_target_type <|
以下代码efterpt显示了如何为引用模型扩展Makefile令牌。
MODELREFS = MODELLIB = engine3200cc_rtwlib。a MODELREF_LINK_LIBS = MODELREF_LINK_RSPFILE = RELATIVE_PATH_TO_ANCHOR = ../../..MODELREF_TARGET_TYPE =环球套票
下面的代码片段展示了如何为引用引用模型的顶层模型展开makefile令牌。
ModelRefs = Engine3200CC传输Modellib = ArchLib.a modelRef_Link_Libs = Engine3200CC_RTWLIB.a传输_rtwlib.a modelRef_link_rspfile =相对_path_to_anchor = .. modelref_target_type = none
令牌 | 扩大到 |
---|---|
MODELREFS 顶级模特 |
引用的模型名称列表。 |
Modellib. |
为模型生成的库的名称。 |
MODELREF_LINK_LIBS 顶级模型的代币 |
顶级模型链接的引用模型库列表。 |
MODELREF_LINK_RSPFILE 顶级模型的代币 |
顶部模型链接所针对的响应文件的名称。此令牌仅对支持链接器响应文件的构建环境有效。金宝app有关它的使用示例,请参见 . |
RELATIVE_PATH_TO_ANCHOR |
来自生成的makefile的位置,到matlab的相对路径®工作文件夹。 |
modelref_target_type. |
表示正在构建的目标类型。可能的值是
|
如果您正在配置您的目标以支持并行构建,如金宝app通过使用并行构建减少引用模型的构建时间(金宝appSimulink Coder),您还必须添加以下令牌定义到您的TMF:
start_dir = |> start_dir <|master_chorchor_dir = |> master_achor_dir <|
令牌 | 扩大到 |
---|---|
start_dir. |
当前工作文件夹(PWD )。 |
master_achor_dir. |
当前工作文件夹(PWD )。 |
添加RELATIVE_PATH_TO_ANCHOR
包括路径到整体包括
变量。
包括=我。-i $(relative_path_to_anchor) $(add_includes) \ $(user_includes) $(shared_includes)
改变srcs.
在您的TMF中变量,使其仅列出常用模块。然后根据下一步骤中所述,条件附加附加模块。例如,改变
SRCS = $(型号).c $(模块)ert_main.c $(add_srcs)$(ext_src)
来
src = $(模块)
创建变量来定义makefile的最终目标。您可以删除为定义最终目标而存在的变量。例如,删除
程序= ../(模特)
并用它替换
ifeq($(modelref_target_type),无)#ttw product = $(相对_path_to_anchor)/ $(型号)bin_setting = $(ld)$(ldflags)-o $(syslibs)build_product_type =“可执行”#tert基于目标SRCS + = $(型号).c ert_main.c $(ext_src)#grt基于目标#srcs + = $(model).c grt_main.cr rt_sim.c $(ext_src)$(solver)else#RTW Product = $(modellib)build_product_type =“库”的子模型
如果模板makefile与工具箱关联,则删除美元(模型). c
或(模型)。(TARGET_LANG_EXT)美元
来自srcs.
列表。
为makefile的最终目标创建规则(替换现有的最终目标规则)。例如:
IFEQ($(modelref_target_type),无)#ttW $(产品)#top模型:$(objs)$(libs)$(modelref_link_libs)$(bin_setting)$(link_objs)$(modelref_link_libs)$(libs)@echo“###创建$(build_product_type):$ @“rtw $的els#子模型(产品):$(objs)$(libs)$(libs)@rm -f $(modellib)$(ar)ruvs $(modellib)$(link_objs)@echo“###创建$(modellib)”@echo“###创建$(build_product_type):$ @”endif
创建一个规则,允许引用模型编译驻留在MATLAB工作文件夹中的文件(PWD
)。
%.o:$(相对_path_to_anchor)/%。C $(cc)-c $(cflags)$ <
如果您使用没有变量的TMFMODELREFS
,这个文件可能在之前的Simulink版本中使用过金宝app®软件如果您希望您的TMF支持模型引用,可以添加任意一金宝app个变量MODELREFS
到制作文件。
缺省情况下,基于TLC的自定义目标的系统目标文件中定义的配置选项的值必须在引用的模型及其父模型中相同。为了放松此要求,包括modelReferenceParameterCheck
字段rtwoptions
结构元素,该元素定义配置选项,并将字段的值设置为'离开'
.例如:
rtwoptions(2)。prompt = '我的自定义参数';rtwoptions(2)。类型=“复选框”;rtwoptions (2) .default = '在';rtwoptions(2)。modelReferenceParameterCheck = '在';rtwoptions(2)。tlcvariable =“mytlcvariable”;...
配置选项我的自定义参数在被引用的模型和它的父模型中是不同的。看到自定义系统目标文件获取关于基于tlc的系统目标文件的信息RTWOptions结构字段摘要列出rtwoptions
字段。
钩子文件是可选的TLC和MATLAB程序文件,在构建过程定义良好的阶段调用它们。钩子文件允许您自定义构建过程,并在过程的各个阶段之间通信信息。
如果您正在调整与模型参考功能的代码生成兼容性的自定义目标,请考虑将检查添加到钩子文件中,以便以不同于顶级模型来处理引用的模型以防止资源冲突。
例如,考虑将下列支票添加到您的
:月31
_make_rtw_hook。m文件
%检查这是引用的mdltrefargettype = get_param(codegenmodelname,`modelreferenceTargettype');iSnotmodelreftarget = strcmp(mdlreftargettype,`none');%无,SIM或RTW,如果ISNotModelreftarget%代码,则特定于参考模型结束的顶部型号%代码
您可能需要在TLC代码中进行类似的检查。
IsModelReferenceTarget() %%特定于顶级模型的代码%else %%特定于引用模型的代码%endif