自定义系统目标文件
本节提供关于系统目标文件的结构的信息、定制系统目标文件的指导原则,以及帮助您生成系统目标文件骨架的基本教程。
使用系统目标文件生成控制代码
系统目标文件控制构建过程的代码生成阶段。系统目标文件还允许您控制目标对最终用户的表示。系统目标文件提供
对构建过程非常重要的变量的定义,例如
CodeFormat
TLC变量生成代码的顶级TLC程序的主要入口点
在系统目标文件浏览器中显示的目标信息
一种用于定义特定于目标的代码生成选项(以及与构建过程相关的其他参数)并在Configuration parameters对话框中显示它们的机制
用于从另一个目标(如嵌入式实时(ERT)目标)继承选项的机制。
注意,尽管系统目标文件是一个目标语言编译器(TLC)文件,但它包含嵌入式MATLAB®代码。在创建或修改系统目标文件之前,您应该获得TLC和MATLAB语言的工作知识。目标语言编译器而且脚本和函数描述TLC和MATLAB语言的特点和语法。
在阅读本节时,您可能希望参考代码生成器提供的系统目标文件。这些文件大多存储在特定于目标的文件夹中
(开放).附加的系统目标文件存储在matlabroot
/ rtw / c
(开放).matlabroot
/工具箱/ rtw /目标
系统目标文件命名和位置约定
系统目标文件必须位于MATLAB路径上的文件夹中,以便在系统目标文件浏览器中显示并在构建过程中调用目标。系统目标文件和相关目标文件的位置和命名约定文件夹和文件命名约定.
系统目标文件结构
概述
本节介绍系统目标文件的结构和内容。下面的清单显示了系统目标文件的一般结构。注意,这不是系统目标文件的完整代码清单。清单由组成系统目标文件的每个部分的摘录组成。
%%---------------------------- %% 头评论部分 %%---------------------------- %% 实时目标% % TMF SYSTLC:例子:my_target。初始注释包含STF Browser的指令。%%文档、日期、版权和其他信息可以在. ...上找到% selectfile NULL_FILE……%%---------------------------- %% 薄层色谱配置变量部分 %%---------------------------- %% 分配代码格式,语言,目标类型。% % %分配CodeFormat = " Embedded-C " %分配TargetType =“RT”%分配语言= " C " %% %%---------------------------- %% 薄层色谱程序入口点 %%---------------------------- %% 调用入口点函数。%包括“codegenentry.tlc”%% %%---------------------------- %% (OPTIONAL) Generate Files for Build Process %%---------------------------- %include "mytarget_genfiles.tlc" %%---------------------------- %% RTW_OPTIONS Section %%---------------------------- /% BEGIN_RTW_OPTIONS %% Define rtwoptions structure array. This array defines target-specific %% code generation variables, and controls how they are displayed. rtwoptions(1).prompt = 'example code generation options'; ... rtwoptions(6).prompt = 'Show eliminated blocks'; rtwoptions(6).type = 'Checkbox'; ... %----------------------------------------% % Configure RTW code generation settings % %----------------------------------------% ... %%---------------------------- %% rtwgensettings Structure %%---------------------------- %% Define suffix text for naming build folder here. rtwgensettings.BuildDirSuffix = '_mytarget_rtw' %% Callback compatibility declaration rtwgensettings.Version = '1'; %% (OPTIONAL) target inheritance declaration rtwgensettings.DerivedFrom = 'ert.tlc'; %% (OPTIONAL) other rtwGenSettings fields... ... END_RTW_OPTIONS %/ %%---------------------------- %% targetComponentClass - MATHWORKS INTERNAL USE ONLY %% REMOVE NEXT SECTION FROM USER_DEFINED CUSTOM TARGETS %%---------------------------- /% BEGIN_CONFIGSET_TARGET_COMPONENT targetComponentClass = 'Simulink.ERTTargetCC'; END_CONFIGSET_TARGET_COMPONENT %/
如果要基于现有系统目标文件创建自定义目标,则必须删除targetComponentClass
节(以指令为界BEGIN_CONFIGSET_TARGET_COMPONENT
而且END_CONFIGSET_TARGET_COMPONENT
).本节保留给MathWorks内部开发的目标使用。
头的评论
文件开头的这些行被格式化为TLC注释。它们向系统目标文件浏览器和构建过程提供所需的信息。注意,必须将浏览器注释放在文件的头部,在其他注释或TLC语句之前。
注释的存在使代码生成器能够检测系统目标文件。当打开系统目标文件浏览器时,代码生成器扫描MATLAB路径,查找具有格式化头注释的TLC文件。注释包含以下指令:
SYSTLC:出现在浏览器中的描述符。
TMF:要在构建过程中使用的模板生成文件(TMF)的名称。选择目标时,此文件名将显示在模板makefile场的代码生成“配置参数”对话框中的“配置参数”。
使:
使
命令在构建过程中使用。当目标器被选中时,该命令显示在使命令场的代码生成“配置参数”对话框中的“配置参数”。
下面的标头注释来自
.matlabroot
/ rtw / c / ert /ert.tlc
%% SYSTLC:为嵌入式Coder创建可视化C/ c++解决方案文件\ %% TMF: RTW。MSVCBuild MAKE: make_rtw…
每个注释最多只能包含两行。
如果不指定TMF
字段在系统目标文件中,文件仍然有效。的值TemplateMakefile
参数指定的回调函数rtwgensettings。SelectCallback
.
所指定的回调函数rtwgensettings。SelectCallback
要更改外部模式参数的值,ExtMode
,ExtModeTransport
,ExtModeMexFile
,或ExtModeIntrfLevel
.
你可以在头注释中指定多组指令。每个这样的组在系统目标文件浏览器中显示为不同的目标配置。在上面的示例中,前两行代码指定ERT目标的默认配置。接下来的两行指定一个创建和构建微软®Visual c++®解决方案(. sln
)文件。下图显示了这些配置如何出现在系统目标文件浏览器中。
看到创建自定义目标配置下面是自定义头注释的示例。
薄层色谱配置变量
系统目标文件的这一部分分配与整个代码生成过程相关的全局TLC变量。
对于嵌入式目标,在大多数情况下,您应该简单地使用ERT目标使用的全局TLC变量设置(ert.tlc
).的系统目标文件使用“Embedded-C”
值CodeFormat
TLC变量,并使用相应的rtwgensettings。本文建立= 'ert.tlc'
在RTW_OPTIONS
TLC文件的部分。验证以下变量是否被赋值:
CodeFormat
:CodeFormat
TLC变量选择生成的代码特征。的“Embedded-C”
值将由ERT目标使用。您应该指定基于ert的目标“Embedded-C”
作为的值CodeFormat
.这种选择是为生产代码、最小的内存使用、静态内存分配和生成代码的简化接口而设计的。的其他值的信息
CodeFormat
TLC变量,看到比较跨产品的系统目标文件支持2022世界杯八强谁会赢?.语言
:唯一有效的值C
的支持C
或c++
由配置参数指定的代码生成TargetLang
.TargetType
:代码生成器定义预处理器符号RT
而且NRT
区分仿真代码和实时代码。这些符号在条件编译中使用。的TargetType
变量决定RT
或NRT
定义。大多数目标旨在生成实时代码。他们分配
TargetType
如下。%assign TargetType = "RT"
有些目标,如模型参考仿真目标、加速仿真目标、RSim目标和s函数目标,只生成用于非实时使用的代码。这样的目标分配
TargetType
如下。%assign TargetType = "NRT"
TLC程序入口点和相关%包括
代码生成过程通常从codegenentry.tlc
.系统目标文件调用codegenentry.tlc
如下。
%包括“codegenentry.tlc”
请注意
codegenentry.tlc
而较低层次的TLC文件则假设CodeFormat
,TargetType
,语言
已分配。在包含之前设置这些变量codegenentry.tlc
.
如果您需要实现特定于目标的代码生成特性,您应该包括TLC文件mytarget_genfiles.tlc
在系统目标文件中。该文件提供了在调用之前和之后执行自定义TLC代码的机制codegenentry.tlc
.有关此机制的信息,请参见
使用mytarget_genfiles.tlc在主代码生成入口点之后执行的自定义TLC代码示例。
目标开发和构建过程有关构建过程的一般信息,以及有关其他构建过程自定义挂钩的信息。
定制代码生成过程的另一种方法是调用较低级别的函数(通常由codegenentry.tlc
),并在过程的每个阶段包括你自己的TLC功能。这种方法应该谨慎对待。看到薄层色谱文件为更多的信息。
调用的较低级函数codegenentry.tlc
是
genmap.tlc
:将块名映射到相应的特定于语言的块目标文件。commonsetup.tlc
:设置全局变量。commonentry.tlc
:启动生成代码的过程。
RTW_OPTIONS节
的RTW_OPTIONS
Section受指令限制:
/% begin_rtw_options . .END_RTW_OPTIONS % /
第一部分RTW_OPTIONS
的数组rtwoptions
结构。这个结构在使用rtwoptions显示自定义目标选项.
第二部分RTW_OPTIONS
部分定义rtwgensettings
,为代码生成过程定义生成文件夹名称和其他设置的结构。看到rtwgensettings结构和有关信息。rtwgensettings
.
rtwgensettings结构
系统目标文件的最后一部分定义rtwgensettings
结构。对象中存储的信息
文件,并由构建过程使用。的模型
.rtwrtwgensettings
目标开发人员最感兴趣的领域是
rtwgensettings。版本
:使用此属性启用rtwoptions
回调函数,并使用回调APIrtwgensettings。SelectCallback
.请注意
要使用回调函数,您必须设置:
rtwgensettings。版本= ' 1 ';
将上面的语句添加到配置RTW码生成设置部分的系统目标文件。
rtwgensettings。本文建立
:这个结构字段定义了系统目标文件,从中继承选项。看到继承目标选择.rtwgensettings。SelectCallback
:该结构字段指定aSelectCallback
函数。必须设置rtwgensettings。版本= ' 1 ';
否则你的回调将被忽略。SelectCallback
与目标相关联,而不是与它的任何单个选项相关联。的SelectCallback
函数在以下情况下被触发:加载模型。
更新“配置参数”对话框中的任何配置设置。
构建的模型。
的
SelectCallback
函数对于设置(或禁用)特定于目标的配置参数非常有用。下面的代码将安装一个
SelectCallback
功能:rtwgensettings。SelectCallback= 'my_select_callback_handler(hDlg,hSrc)';
的论证
SelectCallback
函数(hSrc处理)
是回调API函数使用的私有数据的句柄。请注意
如果您已经开发了一个自定义目标,并且希望它与模型引用兼容,那么您必须实现一个
SelectCallback
函数来声明模型引用兼容性。看到支持模型引用.rtwgensettings。一个ctivateCallback
:此属性指定一个ActivateCallback
函数。的ActivateCallback
函数在模型的活动配置集发生变化时触发。这可能发生在模型加载期间,也可能发生在用户更改活动配置集时。下面的代码将安装一个
ActivateCallback
功能:rtwgensettings。一个ctivateCallback = 'my_activate_callback_handler(hDlg,hSrc)';
的论证
ActivateCallback
函数(hSrc处理)
是回调API函数使用的私有数据的句柄。rtwgensettings。PostApplyCallback
:此属性指定aPostApplyCallback
函数。的PostApplyCallback
函数触发应用或好吧单击“配置参数”对话框中的选项。的PostApplyCallback
函数在对配置集应用更改之后调用。下面的代码将安装一个
PostApplyCallback
功能:rtwgensettings。hSrc PostApplyCallback = ' my_postapply_callback_handler(处理)”;
的论证
PostApplyCallback
函数(hSrc处理)
是回调API函数使用的私有数据的句柄。rtwgensettings。BuildDirSuffix
:为了标识由构建过程创建的构建文件夹,大多数系统目标文件都定义了文件夹名称后缀。文件中定义的后缀,将构成生成文件夹的名称rtwgensettings。BuildDirSuffix
字段转换为模型名称。的新字符串值,可以修改后缀rtwgensettings。BuildDirSuffix
.例如:rtwgensettings。BuildDirSuffix= '_mytarget_rtw'
构建过程创建一个名为
.有关更多信息,请参见构建过程文件夹.模型
_mytarget_rtw做不使用函数指定新的字符串值。例如:
rtwgensettings。BuildDirSuffix= my_get_build_suffix(bdroot);
额外的代码生成选项
使用TLC配置生成代码描述了额外的TLC代码生成变量。目标的最终用户可以通过输入表单的MATLAB命令来分配这些变量
set_param (modelName TLCOptions, -aVariable =瓦尔”);
(有关更多信息,请参见为代码生成指定TLC.)
然而,首选的方法是使用以下形式的语句在系统目标文件中分配这些变量:
%分配变量=瓦尔
为了可读性,我们建议您在注释之后的系统目标文件部分中添加这样的赋值配置RTW码生成设置.
模型参考注意事项
看到支持模型引用对于有关系统目标文件和其他修改的重要信息,您可能需要进行支持代码生成器模型引用特性的修改。
定义和显示自定义目标选项
使用rtwoptions显示自定义目标选项
控件中要显示的选项代码生成的“配置参数”对话框中rtwoptions
结构。
的领域rtwoptions
结构定义变量和要在“配置参数”对话框中显示的关联用户界面元素。使用rtwoptions
结构数组,可以定义对话框中显示的特定于目标的选项,并将选项组织到类别中。您还可以编写回调函数来指定如何处理这些选项。
当代码生成窗格打开时,rtwoptions
扫描结构数组,并显示列出的选项。每个选项都由一个指定的用户界面元素(复选框、编辑字段、菜单或按钮)表示,该元素显示当前选项值。
用户界面元素可以处于启用或禁用(显示为暗淡)状态。如果启用了某个选项,用户可以更改该选项的值。如果一个选项被禁用,该选项将使用默认值,用户不能更改该选项的值。
你也可以使用rtwoptions
结构数组来定义特殊的NonUI元素,这些元素导致执行回调函数,但不显示在代码生成窗格。看到NonUI元素.
的元素rtwoptions
结构数组被组织成组。每组项都以类型的头元素开始类别
.的默认字段类别
头文件必须包含类别中剩余元素的计数。
的类别
控件上要显示的选项代码生成窗格。每个类别的标题后面跟着一个或多个选项定义元素。
每一类目标选项对应下面列出的选项代码生成在“配置参数”对话框中。
表rtwoptions结构字段汇总总结了各领域的研究rtwoptions
结构。
例子rtwoptions结构。以下rtwoptions
结构摘自一个示例系统目标文件,
.该代码定义了matlabroot
/工具箱/ rtw / rtwdemos / rtwoptions_demo /usertarget.tlcrtwoptions
结构数组。第一个(头)元素的默认字段被设置为4
,表示头文件后面的元素数量。
rtwoptions(1)。提示= 'userPreferred target options (I)'; rtwoptions(1).type = 'Category'; rtwoptions(1).enable = 'on'; rtwoptions(1).default = 4; % number of items under this category % excluding this one. rtwoptions(1).popupstrings = ''; % At the first item, user has to rtwoptions(1).tlcvariable = ''; % initialize all supported fields rtwoptions(1).tooltip = ''; rtwoptions(1).callback = ''; rtwoptions(1).makevariable = ''; rtwoptions(2).prompt = 'Execution Mode'; rtwoptions(2).type = 'Popup'; rtwoptions(2).default = 'Real-Time'; rtwoptions(2).popupstrings = 'Real-Time|UserDefined'; rtwoptions(2).tlcvariable = 'tlcvariable1'; rtwoptions(2).tooltip = ['See this text as tooltip']; rtwoptions(3).prompt = 'Log Execution Time'; rtwoptions(3).type = 'Checkbox'; rtwoptions(3).default = 'on'; rtwoptions(3).tlcvariable = 'RL32LogTETModifier'; rtwoptions(3).tooltip = ['']; % no tooltip rtwoptions(4).prompt = 'Real-Time Interrupt Source'; rtwoptions(4).type = 'Popup'; rtwoptions(4).default = 'Timer'; rtwoptions(4).popupstrings = 'Timer|5|6|7|8|9|10|11|12|13|14|15'; rtwoptions(4).tlcvariable = 'tlcvariable3'; rtwoptions(4).callback = 'usertargetcallback(hDlg, hSrc, ''tlcvariable3'')'; rtwoptions(4).tooltip = ['']; rtwoptions(4).tooltip = ['See TLC file for how to use reserved '... ' keyword ''hDlg'', and ''hSrc''.']; ... rtwoptions(5).prompt = 'Signal Logging Buffer Size in Doubles'; rtwoptions(5).type = 'Edit'; rtwoptions(5).default = '100000'; rtwoptions(5).tlcvariable = 'tlcvariable2'; rtwoptions(5).tooltip = [''];
第一个元素加了a首选目标选项(I)窗格下代码生成在“配置参数”对话框中。中定义的选项rtwoptions (2)
,rtwoptions (3)
,rtwoptions (4)
,rtwoptions (5)
.
如果想定义大量选项,可以定义多个类别
组在单个系统目标文件中。
注意rtwoptions
结构和回调是用MATLAB代码编写的,尽管它们嵌入到TLC文件中。的语法rtwoptions
结构定义和代码,您可以在MATLAB提示符下通过复制和粘贴它们到MATLAB命令窗口来执行命令。
要了解更多关于usertarget.tlc
以及它提供的示例回调文件,请参见使用自定义rtwoptions的系统目标文件示例.更多针对特定目标的例子rtwoptions
定义,请参阅
下的文件目标
.tlc
(开放).matlabroot
/ rtw / c
rtwoptions结构字段汇总的字段rtwoptions
结构。
rtwoptions结构字段汇总
字段名 | 描述 |
---|---|
|
有关回调用法的示例,请参见使用自定义rtwoptions的系统目标文件示例. |
|
不要使用
有关回调用法的示例,请参见使用自定义rtwoptions的系统目标文件示例. |
|
选项的默认值(如果 |
|
必须 |
|
与该选项关联的模板生成文件令牌(如果有的话)。的 |
modelReferenceParameterCheck |
指定选项是否必须在引用模型及其父模型中具有相同的值。如果该字段未指定或具有该值“上” 选项值必须相同。如果指定了该字段并具有该值“关闭” 选项值可以不同。看到控制配置选项值协议. |
|
元素,该元素不显示,但用于调用关闭或打开回调。看到NonUI元素. |
|
不要使用 有关回调用法的示例,请参见使用自定义rtwoptions的系统目标文件示例. |
|
如果 “rt_ | _rt |没有的 |
|
为该选项贴上标签。 |
|
与该选项关联的TLC变量的名称。 |
|
当鼠标放在项目上时显示的帮助文本。 |
|
类型的元素: |
NonUI元素。的元素rtwoptions
数组的类型NonUI
存在只是为了调用回调。一个NonUI
元素没有显示在“配置参数”对话框中。你可以使用NonUI
元素,如果您想在对话框打开或关闭时执行与用户界面元素不关联的回调。请参阅下一节,使用自定义rtwoptions的系统目标文件示例了一个例子。
请注意
类型元素的默认值NonUI
或编辑
确定该元素允许的值集。
如果默认值为
' 0 '
或' 1 '
:型
NonUI
,元素存储布尔值。型
编辑
,元素存储类型的值int32
.
如果默认值为非
' 0 '
或' 1 '
,元素存储类型的值int32
.如果默认值不包含整数,则将元素计算为字符向量。
使用自定义rtwoptions的系统目标文件示例
提供了一个带有MATLAB文件回调函数的工作系统目标文件作为示例,说明如何使用rtwoptions
控件上显示和处理自定义选项的代码生成窗格。这些示例与回调API兼容。
示例目标文件位于文件夹(开放):
matlabroot/工具箱/ rtw / rtwdemos / rtwoptions_demo
示例目标文件包括:
usertarget.tlc
:系统目标文件示例。该文件演示了如何定义自定义菜单、复选框和编辑字段。该文件还说明了回调的用法。usertargetcallback.m
:一个由菜单调用的MATLAB文件回调。
在阅读本节时,请参考示例文件。示例系统目标文件,usertarget.tlc
:说明使用rtwoptions
查询自定义目标选项。
的执行模式菜单。
的记录执行时间复选框。
的实时中断源菜单。该菜单执行一个定义在外部文件中的回调,
usertargetcallback.m
.与菜单相关联的TLC变量被传递给回调函数,回调函数将显示菜单的当前值。编辑字段信号日志缓冲区大小为双倍.
尝试研究示例代码,同时与Configuration Parameters对话框中的示例目标选项进行交互。要与示例目标文件交互,
使
(开放)你的工作文件夹。matlabroot
/工具箱/ rtw / rtwdemos / rtwoptions_demo打开您选择的模型。
打开“配置参数”对话框并选择代码生成窗格。
点击浏览.打开系统目标文件浏览器。选择
usertarget.tlc
.然后单击好吧.观察到的代码生成窗格包含自定义子选项卡:首选目标选项(I).
当您与这个类别中的选项交互并打开和关闭配置参数对话框时,观察MATLAB命令窗口中显示的消息。这些消息从系统目标文件中的代码或从系统目标文件调用的回调中打印出来。
继承目标选择
ert.tlc
提供了一套基本的嵌入式编码器®代码生成选项。如果你的目标是基于ert.tlc
,您的系统目标文件通常应该继承ERT中定义的选项。
使用rtwgensettings。本文建立
字段rtwgensettings
结构来定义要从中继承选项的系统目标文件。您应该将自定义目标转换为使用以下机制。
设置rtwgensettings。本文建立
字段的值,示例如下:
rtwgensettings。本文建立= 'stf.tlc';
在哪里月31
要从中继承选项的系统目标文件的名称。例如:
rtwgensettings。本文建立= 'ert.tlc';
当Configuration Parameters对话框执行这行代码时,它包含来自的选项stf.tlc
自动。如果stf.tlc
是已转换为新布局的MathWorks内部系统目标文件,则对话框使用新布局显示继承的选项。
处理不支持的选项。如果目标不支持继承的所有选项ert.tlc
,您应该检测到不支持的选项设置,并显示警告或错误消息。在某些情况下,如果用户选择了目标不支持的选项,您可能需要中止构建过程。例如,如果您的目标不支持生成一个示例主程序选项,如果选择了该选项,则不应允许继续进行构建过程。
即使您的目标可能不支持所有继承的ERT选项,也需要在代码生成“配置参数”对话框中的“配置参数”。不要简单地从rtwoptions
结构。选项必须在对话框中,以便代码生成器在执行优化时扫描。
例如,您可能希望阻止用户关闭单输出/更新功能选择。从对话框中删除这个选项并简单地分配TLC变量似乎是合理的CombineOutputUpdateFcns
来在
.但是,如果对话框中没有包含该选项,则代码生成器假定输出和更新函数包含在对话框中不结合。结果是生成效率较低的代码。
自定义系统目标文件的技巧和技术
简介
以下部分包括定制系统目标文件的技术信息,包括:
如何从您的系统目标文件调用自定义TLC代码
支持多种开发环境的方法
更新系统目标文件时的注意事项
要求和建议%包括
如果您需要实现特定于目标的代码生成特性,我们建议您的系统目标文件包括TLC文件mytarget_genfiles.tlc
.
一旦您的系统目标文件设置了所需的TLC环境,您必须包括codegenentry.tlc
启动标准代码生成过程。
mytarget_genfiles.tlc
提供了在主代码生成入口点之后执行自定义TLC代码的机制。看到使用mytarget_genfiles.tlc.
使用mytarget_genfiles.tlc。mytarget_genfiles.tlc
(可选)作为一个中心文件非常有用,可以从中调用特定于目标的TLC文件,这些文件生成额外的文件,作为目标构建过程的一部分。例如,您的目标可能为开发环境创建子makefile或项目文件,或者为调试器创建自动下载的命令脚本。
然后,构建过程可以直接从make过程调用这些生成的文件,也可以在可执行文件创建之后调用。这是用
机制,如使用STF_make_rtw_hook文件自定义构建过程.月31
_make_rtw_hook.m
下面的TLC代码给出了一个示例mytarget_genfiles.tlc
文件。
%selectfile NULL_FILE %assign ModelName = CompiledModel。Name %%创建调试器脚本%assign model_script_file = "%.cfg" %assign script_file = "debugger_script_template. cfg"tlc" %if RTWVerbose %selectfile STDOUT ###正在创建% %selectfile NULL_FILE %endif %include "% " %openfile bld_file = "% " % %closefile bld_file . quot
处理目标选项值的别名
本节描述实用函数,可用于在测试用户指定的目标设备类型(ProdHWDeviceType
)和代码替换库(CodeReplacementLibrary
).
RTW.isHWDeviceTypeEq。要测试两个目标设备类型值是否代表相同的硬件设备,调用以下函数:
结果= RTW.isHWDeviceTypeEq (类型1,类型2)
在哪里
而且类型1
包含目标设备类型值或别名的字符向量。类型2
的RTW.isHWDeviceTypeEq
函数如果返回true
而且类型1
表示相同硬件设备的字符向量。例如,下面的调用返回true:类型2
RTW.isHWDeviceTypeEq(“指定”、“通用- >自定义”)
有关目标设备类型选项的说明ProdHWDeviceType
的命令行信息硬件实现面板参数设备供应商而且设备类型.
RTW.resolveHWDeviceType。要返回硬件设备的设备类型值,给定一个可能是别名或遗留值的值,调用以下函数:
结果= RTW.resolveHWDeviceType (类型)
在哪里
包含目标设备类型值或别名的字符向量。类型
的RTW.resolveHWDeviceType
函数返回设备的设备类型值。例如,以下调用都返回“通用- >自定义”
:
RTW.resolveHWDeviceType(“指定”)RTW.resolveHWDeviceType(通用- >自定义)
有关目标设备类型选项的说明ProdHWDeviceType
的命令行信息硬件实现面板参数设备供应商而且设备类型.
RTW.isTflEq。为了测试两个代码替换库名称是否代表相同的CRL,调用以下函数:
结果= RTW.isTflEq (name1,name2)
在哪里
而且name1
是包含CRL值或别名的字符向量。name2
的RTW.isTflEq
函数如果返回true
而且name1
表示相同代码替换库的字符向量。例如,下面的调用返回true:name2
RTW.isTflEq('GNU','GNU C99 extensions')
的描述CodeReplacementLibrary
参数,看到代码替换库.
RTW.resolveTflName。要返回代码替换库的CRL值,给定一个可能是别名或遗留值的值,调用以下函数:
结果= RTW.resolveTflName (的名字)
在哪里
是包含CRL值或别名的字符向量。的名字
的RTW.resolveTflName
函数返回所引用的代码替换库的值。例如,以下调用都返回“GNU C99扩展”
:
RTW.resolveTflName环球套票(GNU的)。resolveTflName('GNU C99 extensions')
的描述CodeReplacementLibrary
参数,看到代码替换库.
支持多种开发环境
您的目标可能需要支持多个开发环境(例如,两个或多个交叉编译器)或多种代码生成模式(例如,生成二进制可执行文件与为编译器生成项目文件)。
实现这一需求的一种方法是实现多个系统目标文件。每个系统目标文件都为开发环境调用一个模板makefile。这相当于提供两个独立的目标。
更新自定义系统目标文件
更新您的自定义系统目标文件会影响您使用更新的系统目标文件加载的模型的选项值。如果禁用某个选项,则更新后的系统目标文件将使用该选项的默认值。如果模型对该选项有不同的值,那么当您用更新的系统目标文件加载模型时,来自模型的值将被丢弃,系统目标文件将使用默认值代替。
创建自定义目标配置
简介
本教程可以补充中描述的示例目标指南示例自定义目标.对于介绍和示例文件,请先尝试示例目标。
本教程指导您完成了创建基于ert的目标的过程,my_ert_target
.本练习演示了创建自定义目标的几个典型任务:
设置目标文件夹和修改MATLAB路径。
对标准系统目标文件和TMF进行修改,使自定义目标在系统目标文件浏览器中可见,继承ERT选项,显示特定于目标的选项,并使用默认的基于主机的编译器生成代码。
使用一个包含内联s函数的简单模型,使用自定义目标测试构建过程。
在这个练习中,您实现了一个可操作的,但是骨架的,基于ert的目标。该目标可以作为自定义嵌入式目标的完整实现的起点。
my_ert_target概述
在下面的小节中,您将创建一个骨骼目标,my_ert_target
.该目标继承并支持ERT目标的标准选项,并在Configuration Parameters对话框中显示附加的特定于目标的选项(参见my_ert_target的目标特定选项).
my_ert_target的目标特定选项
my_ert_target
支持基于工具链的构建,生成在主机系统上运行的代码和可执行程序。my_ert_target
使用低成本航空
编译器®平台。所选的编译器很容易获得,并且随代码生成器一起分发。在Microsoft Windows平台上,如果使用不同的编译器,则可以设置低成本航空
临时作为你的默认编译器通过以下MATLAB命令:
墨西哥人设置
该软件显示安装在计算机上的支持编译器的链接。单击低成本航空
链接。
请注意
在Linux上®确保你安装了C编译器。如果是这样,您可以使用Linux文件夹语法来完成这个练习。
my_ert_target
还可以支持基于模板生成文件的构建。有关在模板makefile方法中使用此目标的更多信息,请参见创建基于ert的模板MakeFile.
您可以测试my_ert_target
与ERT目标兼容的模型(参见配置系统目标文件(嵌入式编码)).生成程序的操作与ERT生成程序相同。
为了简化目标的测试,使用targetmodel
这是一个非常简单的固定步长模型(参见创建测试模型和s -函数).S-Function块targetmodel
的源代码timestwo
示例,并生成完全内联的代码。看到s函数的例子而且使用TLC的内联s -函数为进一步讨论timestwo
s函数的例子。
创建目标文件夹
创建文件夹来存储目标文件,并将它们添加到MATLAB路径,遵循推荐的约定(参见文件夹和文件命名约定).您还可以创建一个文件夹来存储测试模型、s -函数和生成的代码。
此示例假设您的目标文件夹和模型文件夹位于该文件夹中c: /工作
.不要将您的目标和模型文件夹放在MATLAB文件夹树中(也就是说,在
文件夹)。matlabroot
创建文件夹并使其可访问:
创建一个目标根文件夹,
my_ert_target
.在Windows平台上的MATLAB命令窗口中,输入:CD c:/work mkdir my_ert_target
在目标根文件夹中,创建一个子文件夹来存储目标文件。
mkdir my_ert_target / my_ert_target
将这些文件夹添加到您的MATLAB路径中。
Addpath c:/work/my_ert_target/my_ert_target . Addpath c:/work/my_ert_target
创建一个文件夹,
my_targetmodel
,以存储测试模型、s函数和生成的代码。mkdir my_targetmodel
创建基于ert的、符合工具链的系统目标文件
通过复制和修改ERT目标的标准系统目标文件,为目标创建一个系统目标文件。然后,通过在“系统目标文件浏览器”和“配置参数”对话框中查看新目标来验证系统目标文件。
编辑系统目标文件。要编辑系统目标文件,使用以下步骤:
将您的工作文件夹更改为您在其中创建的文件夹创建目标文件夹.
cd c: / / my_ert_target / my_ert_target工作
放置一份
在matlabroot
/ rtw / c / ert /ert.tlcc: / / my_ert_target / my_ert_target工作
然后重命名为my_ert_target.tlc
.该文件ert.tlc
是ERT目标的系统目标文件。开放
my_ert_target.tlc
在您选择的文本编辑器中。自定义系统目标文件,用指令替换头注释行,使系统目标文件在系统目标文件浏览器中可见,并定义相关的TMF。
使
命令和外部模式接口文件(如果有的话)。有关这些指令的更多信息,请参见头的评论.中替换头注释
my_ert_target.tlc
使用以下头注释。%% SYSTLC: My ERT-based Target TMF: my_ert_target_lcc。tmf: make_rtw
该文件
my_ert_target.tlc
继承标准ERT选项,使用中描述的机制继承目标选择.因此,现有的rtwoptions
结构定义是多余的。编辑RTW_OPTIONS部分,使其只包含以下代码。/ % BEGIN_RTW_OPTIONS %----------------------------------------% % 环球套票代码生成配置设置 % %----------------------------------------% rtwgensettings。BuildDirSuffix =“_ert_rtw”;END_RTW_OPTIONS % /
结束后删除代码
RTW_OPTIONS
部分,该部分由指令分隔BEGIN_CONFIGSET_TARGET_COMPONENT和END_CONFIGSET_TARGET_COMPONENT
.此代码仅供MathWorks内部开发人员使用。中的“生成文件夹”后缀
rtwgenSettings
中描述的约定的结构rtwgensettings结构.属性的字符向量设置后缀
_my_ert_target
自定义目标,改变直线rtwgensettings。BuildDirSuffix= '_ert_rtw'
来
rtwgensettings。BuildDirSuffix= '_my_ert_target_rtw'
修改
rtwgenSettings
结构从ERT目标继承选项,并声明Release 14或更高版本的兼容性rtwgensettings结构.将以下代码添加到rtwgenSettings
定义:rtwgensettings。本文建立= 'ert.tlc'; rtwgensettings.Version = '1';
添加一个
rtwoptions
结构,该结构定义特定于目标的选项类别,在BEGIN_RTW_OPTIONS
指令。下面的代码显示了完整的RTW_OPTIONS
节,包括前文rtwgenSettings
的变化。/ % BEGIN_RTW_OPTIONS rtwoptions(1)。prompt = '我的目标选项';rtwoptions(1)。类型= 'Category'; rtwoptions(1).enable = 'on'; rtwoptions(1).default = 3; % number of items under this category % excluding this one. rtwoptions(1).popupstrings = ''; rtwoptions(1).tlcvariable = ''; rtwoptions(1).tooltip = ''; rtwoptions(1).callback = ''; rtwoptions(1).makevariable = ''; rtwoptions(2).prompt = 'Demo option 1'; rtwoptions(2).type = 'Checkbox'; rtwoptions(2).default = 'off'; rtwoptions(2).tlcvariable = 'DummyOpt1'; rtwoptions(2).makevariable = ''; rtwoptions(2).tooltip = ['Demo option1 (non-functional)']; rtwoptions(2).callback = ''; rtwoptions(3).prompt = 'Demo option 2'; rtwoptions(3).type = 'Checkbox'; rtwoptions(3).default = 'off'; rtwoptions(3).tlcvariable = 'DummyOpt2'; rtwoptions(3).makevariable = ''; rtwoptions(3).tooltip = ['Demo option2 (non-functional)']; rtwoptions(3).callback = ''; rtwoptions(4).prompt = 'Demo option 3'; rtwoptions(4).type = 'Checkbox'; rtwoptions(4).default = 'off'; rtwoptions(4).tlcvariable = 'DummyOpt3'; rtwoptions(4).makevariable = ''; rtwoptions(4).tooltip = ['Demo option3 (non-functional)']; rtwoptions(4).callback = ''; %----------------------------------------% % Configure RTW code generation settings % %----------------------------------------% rtwgensettings.BuildDirSuffix = '_my_ert_target_rtw'; rtwgensettings.DerivedFrom = 'ert.tlc'; rtwgensettings.Version = '1'; rtwgensettings.SelectCallback = 'enableToolchainCompliant(hSrc, hDlg)'; %SelectCallback provides toolchain approach support, but requires custom function %Omit this SelectCallback if using the template makefile approach END_RTW_OPTIONS %/
将更改保存到
my_ert_target.tlc
并关闭该文件。
创建ToolchainCompliant函数。要使用工具链方法启用构建,您需要创建一个函数,该函数对应于SelectCallback
在自定义系统目标文件的末尾。此函数设置工具链遵从性的属性。
以下参数启用工具链遵从性。slConfigUISetVal(hDlg, hSrc, 'UseToolchainInfoCompliant', 'on');slConfigUISetVal(处理,hSrc GenerateMakefile ', '对');以下参数对于工具链遵从性来说是不需要的。但是,建议您设置这些默认值并禁用这些参数(如下所示)。slConfigUISetVal(处理,hSrc RTWCompilerOptimization ', '关闭');slConfigUISetVal(处理,hSrc MakeCommand ', ' make_rtw ');slConfigUISetEnabled(处理、hSrc RTWCompilerOptimization,假);slConfigUISetEnabled(处理、hSrc MakeCommand,假);hSrc.refreshDialog; end
请注意
如果使用模板makefile方法,请忽略从系统目标文件调用启用工具链遵从性的函数。相反,使用信息创建基于ert的模板MakeFile.
查看系统目标文件。此时,您可以验证目标是否继承并显示如下的ERT选项:
创建一个新模型。
打开模型资源管理器或配置参数对话框。
选择代码生成窗格。
点击浏览打开“系统目标文件”浏览器。
在文件浏览器中,滚动目标列表以查找新目标,
my_ert_target.tlc
.(这一步假设您的MATLAB路径包含c: / / my_ert_target / my_ert_target工作
,如前所述创建目标文件夹.)选择
我的ERT-based目标
并点击好的。的代码生成窗格现在显示已为
my_ert_target.tlc
目标。的系统目标文件,语言,工具链,构建配置字段应该出现:选择我的目标选择窗格。对象中定义的三个复选框选项
rtwoptions
结构。选择代码生成窗格并重新打开系统目标文件浏览器。
选择嵌入式编码器目标(
ert.tlc
).目标将显示标准ERT选项。关闭模式。你不需要保存它。
骨骼目标的系统目标文件已经完成。如果您正在使用工具链方法,则可以为目标调用构建过程。
如果您更喜欢使用模板生成文件方法,对TMF的引用,my_ert_target_lcc.tmf
,在系统目标文件头注释中,可以阻止您在TMF文件到位之前为目标调用构建过程。首先,您必须创建一个my_ert_target_lcc.tmf
文件。
创建基于ert的模板MakeFile
如果您正在使用带有工具链兼容的自定义目标的工具链生成文件方法,请忽略应用于模板生成文件方法的步骤。(跳过这一节。)
如果您正在使用模板生成文件方法,请遵循适用于模板生成文件的步骤,而忽略从系统目标文件调用启用工具链遵从性的函数,该函数在创建基于ert的、符合工具链的系统目标文件.
通过复制和修改提供的ERT模板生成文件,为目标创建模板生成文件。选择最适合您的目标的模板生成文件。这个示例使用ert_lcc64.tmf
,但你也可以用ert_vcx64.tmf
或ert_unix.tmf
.
确保您的工作文件夹仍然设置为您之前在其中创建的目标文件夹创建目标文件夹.
c: / / my_ert_target / my_ert_target工作
放置一份
在matlabroot
/工具箱/编码器/编译/ tmf / ert_lcc64.tmfc: / / my_ert_target / my_ert_target工作
重命名它my_ert_target_lcc.tmf
.该文件ert_lcc64.tmf
是用于LCC编译器的ERT编译器特定模板生成文件。开放
my_ert_target_lcc.tmf
在文本编辑器中。改变
SYS_TARGET_FILE
参数的文件引用.tlc
文件在使
文件。改变行SYS_TARGET_FILE =任何
来
SYS_TARGET_FILE = my_ert_target.tlc
将更改保存到
my_ert_target_lcc.tmf
并关闭该文件。
您的目标现在可以生成代码并构建基于主机的可执行文件。在下一节中,您将创建一个测试模型,并使用my_ert_target
.
创建测试模型和s -函数
在本节中,您将构建一个简单的测试模型,以便稍后在代码生成中使用:
将工作文件夹设置为
c: / / my_targetmodel工作
.cd c: / / my_targetmodel工作
在本教程的其余部分中,
my_targetmodel
假定为工作文件夹。目标将代码生成过程的输出文件写入工作文件夹中的构建文件夹中。类生成内联代码时timestwo
S-function,构建过程在工作文件夹中查找S-function的TLC实现。复制以下C和TLC文件
timestwo
S-function到你的工作文件夹:matlabroot
/工具/模型/ simdemos / simfeatures / src /timestwo.cmatlabroot
/工具/模型/ simdemos / simfeatures / tlc_c /timestwo.tlc
构建
timestwo
MEX-file在c: / / my_targetmodel工作
.墨西哥人timestwo.c
使用Simulink中的S-Function块创建以下模型®用户定义的函数库。将模型保存在您的工作文件夹中为
targetmodel
.双击S-Function块,打开块参数对话框。输入s函数名
timestwo
.点击好吧.块现在绑定到timestwo
MEX-file。打开模型资源管理器或配置参数对话框,并选择解算器窗格。
设置解算器类型来
固定步
并点击应用.保存模型。
打开作用域并运行一个模拟。验证
timestwo
s函数将其输入乘以2.0。
保持targetmodel
模型开放以在下一节中使用,在这一节中您将使用测试模型生成代码。
验证目标操作
在本节中进行配置targetmodel
为my_ert_target
自定义目标,并使用目标生成代码和构建可执行文件:
在“配置参数”对话框中,选择代码生成窗格。
点击浏览打开“系统目标文件浏览器”。
在浏览器中,选择
我的ERT-based目标
并点击好吧.“配置参数”对话框现在显示代码生成面板的
my_ert_target
.选择代码生成>报告窗格并选择创建代码生成报告选择。
点击应用并保存模型。模型已配置为
my_ert_target
.构建的模型。如果构建成功,MATLAB命令窗口将显示下面的消息。
成功完成模型:targetmodel的构建过程
您的工作文件夹包含
targetmodel.exe
文件和构建文件夹,targetmodel_my_ert_target_rtw
,其中包含生成的代码和其他文件。工作文件夹还包含slprj
文件夹,由构建过程在内部使用。代码生成器还创建一个代码生成报告。
要查看生成的代码,请在C代码选项卡上,单击视图代码.在内容窗格中的代码生成报告,单击
targetmodel.c
链接。在
targetmodel.c
,定位模型阶跃函数,targetmodel_step
.遵守以下代码。/* S-Function块:
/S-Function */ /*将input乘以两个*/ targetmodel_B. /SFunction = targetmodel_B。SineWave * 2.0; 这段代码的存在证实了
my_ert_target
自定义目标为模型中的S-Function块生成内联输出计算。