金宝app支持模型引用
如果您想使用自定义系统目标文件来构建已引用模型的模型,那么您必须配置自定义系统目标文件以支持模型引用。金宝app
使用自定义系统目标文件引用模型的需求
构建一个引用其他模型的模型:
使用从GRT或ERT系统目标文件派生的自定义系统目标文件。
自定义系统目标文件必须声明模型引用遵从性——参见声明模型引用遵从性.
模板makefile必须定义一些支持模型引用的实体——参见金宝app在TMF中提供模型引用支持金宝app.
声明模型引用遵从性
为目标声明模型引用遵从性,必须实现一个回调函数,该函数将ModelReferenceCompliant
标志,然后将回调函数安装在SelectCallback
字段rtwgensettings
结构在您的系统目标文件。每当用户在系统目标文件浏览器中选择目标时,就会触发回调函数。例如,下面的系统目标文件代码安装一个SelectCallback
函数命名custom_select_callback_handler
:
rtwgensettings。SelectCallback= 'custom_select_callback_handler(hDlg,hSrc)';
的论证SelectCallback
函数(处理
,hSrc
)是回调API函数使用的私有数据句柄。这些句柄仅限于在系统目标文件回调函数中使用。它们应该不加改动地传入。
您的回调函数应该设置ModelReferenceCompliant
标志如下:
slConfigUISetVal(处理,hSrc ModelReferenceCompliant ', '对');slConfigUISetEnabled(处理、hSrc ModelReferenceCompliant,假);hSrc.refreshDialog;
如果您可能使用目标来构建包含大型模型引用层次结构的模型,请考虑配置目标以支持并行构建,如中所讨论的金宝app通过使用并行构建来减少引用模型的构建时间.
要为并行构建配置目标,回调函数还必须设置ParMdlRefBuildCompliant
标志如下:
slConfigUISetVal(处理,hSrc ParMdlRefBuildCompliant ', '对');slConfigUISetEnabled(处理、hSrc ParMdlRefBuildCompliant,假);hSrc.refreshDialog;
有关系统目标文件回调API的详细信息,请参见slConfigUIGetVal
,slConfigUISetEnabled
,slConfigUISetVal
函数参考页。
在TMF中提供模型引用支持金宝app
为模型引用配置模板makefile (TMF):
添加以下make变量和令牌,在生成makefile时展开:
Modelrefs = |> Modelrefs <| modellib = |> modellib <| modelref_link_libs = |> modelref_link_libs <| modelref_link_rspfile = |> modelref_link_rspfile_name <| relative_path_to_anchor = |> relative_path_to_anchor <| modelref_target_type = |> modelref_target_type <|
下面的代码摘录展示了如何为引用的模型扩展makefile令牌。
MODELREFS = MODELLIB = engine3200cc_rtwlib。a MODELREF_LINK_LIBS = MODELREF_LINK_RSPFILE = RELATIVE_PATH_TO_ANCHOR = ../../..Modelref_target_type = RTW
下面的代码摘录展示了如何为引用引用模型的顶层模型展开makefile令牌。
MODELREFS = engine3200cc传输MODELLIB = MODELREF_LINK_LIBS = engine3200cc_rtwlib。transmission_rtwlib。a MODELREF_LINK_RSPFILE = RELATIVE_PATH_TO_ANCHOR = ..Modelref_target_type = none
令牌 扩大到 MODELREFS
对于顶层模型引用模型名称的列表。 MODELLIB
为模型生成的库的名称。 MODELREF_LINK_LIBS
顶模令牌顶层模型链接到的引用模型库的列表。 MODELREF_LINK_RSPFILE
顶模令牌顶层模型链接到的响应文件的名称。此令牌仅对支持链接器响应文件的构建环境有效。金宝app有关它的使用示例,请参见
.matlabroot
/工具箱/编码器/编译/ tmf / grt_vcx64.tmfRELATIVE_PATH_TO_ANCHOR
相对路径,从生成的makefile的位置到MATLAB®工作文件夹。 MODELREF_TARGET_TYPE
表示正在构建的目标的类型。可能的值为
没有一个
:独立模型或引用其他模型的顶模型环球套票
:模型参考目标构建SIM卡
:模型参考仿真目标构建
如果您正在配置您的目标以支持并行构建,如金宝app通过使用并行构建来减少引用模型的构建时间,您还必须在TMF中添加以下令牌定义:
Start_dir = |> Start_dir <| master_anchor_dir = |> master_anchor_dir <|
令牌 扩大到 START_DIR
当前工作文件夹( 松材线虫病
)在构建开始的时候。MASTER_ANCHOR_DIR
当前工作文件夹( 松材线虫病
)在构建开始的时候。添加
RELATIVE_PATH_TO_ANCHOR
包括总体路径包括
变量。包括= -i。-i $(relative_path_to_anchor) $(add_includes) \ $(user_includes) $(shared_includes)
改变
src
变量,以便它最初只列出公共模块。然后有条件地添加其他模块,如下一步所述。例如,改变SRCS = $(MODEL).c $(MODULES) ert_main.c $(ADD_SRCS) $(EXT_SRC)
来
SRCS = $(模块)
创建变量来定义makefile的最终目标。您可以删除定义最终目标时可能存在的变量。例如,删除
程序= ../$(模型)
并将其替换为
ifeq ($(MODELREF_TARGET_TYPE), NONE) # RTW的顶层模型PRODUCT = $(RELATIVE_PATH_TO_ANCHOR)/$(model) BIN_SETTING = $(LD) $(LDFLAGS) -o $(PRODUCT) $(SYSLIBS) BUILD_PRODUCT_TYPE = "可执行" #基于ERT的目标SRCS += $(model).c ert_main.c $(EXT_SRC) #基于GRT的目标# SRCS += $(model).c grt_main.c rt_simm .c $(EXT_SRC) $(SOLVER) else # RTW的子模型PRODUCT = $(MODELLIB) BUILD_PRODUCT_TYPE = "library" endif
请注意
如果模板makefile与工具链相关联,请删除
美元(模型). c
或(模型)。(TARGET_LANG_EXT)美元
从src
列表。为makefile的最终目标创建规则(替换现有的最终目标规则)。例如:
ifeq ($(MODELREF_TARGET_TYPE),NONE) #顶级模型RTW $(PRODUCT): $(OBJS) $(LIBS) $(MODELREF_LINK_LIBS) $(BIN_SETTING) $(LINK_OBJS) $(MODELREF_LINK_LIBS) $(LIBS) @echo "###创建$(BUILD_PRODUCT_TYPE): $@"其他#子模型RTW $(PRODUCT): $(OBJS) $(LIBS) @rm -f $(MODELLIB) $(ar) ruvs $(MODELLIB) $(LINK_OBJS) @echo "###创建$(MODELLIB)"###创建$(BUILD_PRODUCT_TYPE): $@
创建一个规则以允许引用模型编译驻留在MATLAB工作文件夹中的文件(
松材线虫病
).%。o: $ (RELATIVE_PATH_TO_ANCHOR) / % c $ (CC) - c (CFLAGS) <美元
请注意
如果您正在使用不带变量的TMFMODELREFS
,该文件可能与以前的Simulink版本一起使用金宝app®软件如果希望TMF支持模型引用,可以添加任意一个变量金宝appMODELREFS
到make文件。
控制配置选项值协议
默认情况下,在系统目标文件中为基于tlc的自定义目标定义的配置选项的值必须在引用的模型中与其父模型中相同。要放宽此要求,请包含modelReferenceParameterCheck
在rtwoptions
结构元素,该元素定义配置选项,并将字段的值设置为“关闭”
.例如:
rtwoptions(2)。prompt = '我的自定义参数';rtwoptions(2)。type = '复选框';Rtwoptions (2).default = 'on';rtwoptions(2)。modelReferenceParameterCheck = 'on';rtwoptions(2)。Tlcvariable = 'mytlcvariable';...
配置选项自定义参数被引用的模型和它的父模型可能有所不同。看到自定义系统目标文件获取有关基于tlc的系统目标文件的信息,以及rtwoptions结构字段汇总有关rtwoptions
字段。
防止资源冲突(可选)
钩子文件是可选的TLC和MATLAB程序文件,在构建过程定义良好的阶段调用它们。钩子文件允许您自定义构建流程,并在流程的各个阶段之间传递信息。
如果您正在调整您的自定义目标以使代码生成与模型引用特性兼容,请考虑在钩子文件中添加检查,以不同于顶级模型处理引用模型,从而防止资源冲突。
例如,考虑将以下检查添加到您的
:月31
_make_rtw_hook。m文件
%检查这是否是一个引用模型mdlRefTargetType = get_param(codeGenModelName, ' ModelReferenceTargetType');isNotModelRefTarget = strcmp(mdlRefTargetType, ' NONE');% NONE, SIM或RTW,如果isNotModelRefTarget是特定于顶级模型的%代码,否则是特定于引用模型端的%代码
您可能需要在TLC代码中进行类似的检查。
%if !IsModelReferenceTarget() %%特定于顶级模型的代码%else %特定于引用模型的代码%endif