如果要使用自定义系统目标文件构建具有引用模型的模型,则必须配置自定义系统目标文件以支持模型引用。金宝app
建立引用其他模型的模型:
使用从GRT或ERT系统目标文件派生的自定义系统目标文件。
自定义系统目标文件必须声明模型参考合规 - 请参阅声明模型参考合规性。
模板makefile必须定义支持模型引用的某些实体 - 请参阅金宝app提供TMF中的模型引用支持金宝app。
要为目标声明模型引用合规性,必须实现设置的回调函数ModelReferenceCompliniant.
标志,然后安装回调函数SelectCallback.
场面的领域RTWGenettings.
结构在系统目标文件中。当用户在系统目标文件浏览器中选择目标时,会触发回调函数。例如,下面的系统目标文件代码安装一个SelectCallback.
函数命名custom_select_callback_handler.
:
RTWGenettings.SelectCallBack ='custom_select_callback_handler(hdlg,hsrc)';
对的论点SelectCallback.
功能 (HDLG.
那HSRC.
)致电回调API函数使用的私有数据。这些句柄仅限于系统目标文件回调函数中使用。他们应该在没有改变的情况下传递。
您的回调函数应该设置ModelReferenceCompliniant.
标志如下:
slConfigUISetVal(处理,hSrc ModelReferenceCompliant ', '对');slConfigUISetEnabled(处理、hSrc ModelReferenceCompliant,假);hsrc.refreshdialog;
如果您可以使用目标来构建包含大型模型参考层次结构的模型,请考虑配置目标以支持并行构建,如讨论金宝app通过使用并行构建减少引用模型的构建时间。
要为并行构建配置目标,回调函数还必须设置parmdlrefbuild替代方案
标志如下:
slconfiguisetval(hdlg,hsrc,'parmdlrefbuildcompliant','on');SLCONFIGUISETENABLED(HDLG,HSRC,'PARMDLREFBUILDCOMPLIST',FALSE);hsrc.refreshdialog;
有关系统目标文件回调API的更多信息,请参阅slConfigUIGetVal
那slconfiguisetenabled.
, 和slConfigUISetVal
功能参考页面。
要为模型引用配置模板makefile(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 =相对_path_to_anchor = ../ ... modelref_target_type = RTW
以下代码efterpt显示了为引用引用模型的顶部模型扩展了Makefile令牌。
ModelRefs = Engine3200CC传输Modellib = ModelRef_Link_Libs = Engine3200CC_RTWLIB.a传输_rtwlib.a modelRef_link_rspfile =相对_path_to_anchor = .. modelref_target_type = none
令牌 | 扩展到 |
---|---|
梅德菲斯 顶级模特 |
引用的模型名称列表。 |
Modellib. |
为模型生成的库的名称。 |
modelref_link_libs. 顶级模特的令牌 |
顶级模型链接的引用模型库列表。 |
modelref_link_rspfile. 顶级模特的令牌 |
顶部模型链接的响应文件的名称。此令牌仅适用于支持链接器响应文件的构建环境。金宝app有关其使用的示例,请参阅 。 |
RELATIVE_PATH_TO_ANCHOR |
相对路径,从生成的makefile的位置,到MATLAB®工作文件夹。 |
modelref_target_type. |
表示正在构建的目标类型。可能的值是
|
如果您配置目标以支持并行构建,则如讨论的所讨论的金宝app通过使用并行构建减少引用模型的构建时间,您还必须将以下令牌定义添加到TMF:
start_dir = |> start_dir <|master_chorchor_dir = |> master_achor_dir <|
令牌 | 扩展到 |
---|---|
start_dir. |
当前的工作文件夹(PWD )。 |
master_achor_dir. |
当前的工作文件夹(PWD )。 |
添加RELATIVE_PATH_TO_ANCHOR
包括整体的路径包括
多变的。
包括= -i。-i $(相对_path_to_anchor)$(add_includes)\ $(user_includes)$(shared_includes)
改变srcs.
在您的TMF中变量,使其仅列出常用模块。然后根据下一步骤中所述,条件附加附加模块。例如,改变
SRCS = $(型号).c $(模块)ert_main.c $(add_srcs)$(ext_src)
到
srcs = $(模块)
创建变量以定义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 =“库”的子模型
笔记
如果模板生成文件与工具链相关联,则删除$(型号).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)$ <
笔记
如果您使用没有变量的TMF梅德菲斯
,这个文件可能在之前的Simulink版本中使用过金宝app®软件。如果您希望TMF支持模型引用,请添加可变变量金宝app梅德菲斯
到制作文件。
缺省情况下,基于TLC的自定义目标的系统目标文件中定义的配置选项的值必须在引用的模型及其父模型中相同。为了放松此要求,包括ModelReferenceParameterCheck.
田野RTWOPTIONS.
定义配置选项的结构元素,并将字段的值设置为'离开'
。例如:
RTWOPTIONS(2).prompt ='我的自定义参数';RTWOPTIONS(2).type ='checkbox';RTWOPTIONS(2).default ='ON';RTWOPTIONS(2).ModelreferenceParameterCheck ='ON';RTWOPTIONS(2).tlcvariable ='mytlcvariable';......
配置选项我的自定义参数在被引用的模型和它的父模型中是不同的。看到自定义系统目标文件有关基于TLC的系统目标文件的信息,以及rtwoptions结构字段摘要列出RTWOPTIONS.
领域。
钩子文件是可选的TLC和MATLAB程序文件,该文件在构建过程的明确阶段中调用。钩子文件允许您自定义构建过程并在过程的各个阶段之间传达信息。
如果您正在调整与模型参考功能的代码生成兼容性的自定义目标,请考虑将检查添加到钩子文件中,以便以不同于顶级模型来处理引用的模型以防止资源冲突。
例如,考虑将下列支票添加到您的
:STF.
_make_rtw_hook.m文件
%检查这是引用的mdltrefargettype = get_param(codegenmodelname,`modelreferenceTargettype');iSnotmodelreftarget = strcmp(mdlreftargettype,`none');%无,SIM或RTW,如果ISNotModelreftarget%代码,则特定于参考模型结束的顶部型号%代码
您可能需要在TLC代码中进行类似的检查。
%if!ismodelreferenceTarget()%%代码特定于顶级型号%% %%代码,该代码特定于引用的模型%ENDIF