自定义系统目标文件
本节提供有关系统目标文件结构的信息、定制系统目标文件的指导方针,以及帮助您生成骨架系统目标文件的基本教程。
用系统目标文件控制代码生成
系统目标文件控制构建过程的代码生成阶段。系统目标文件还允许您控制目标对最终用户的表示。系统目标文件提供
对构建过程至关重要的变量的定义,例如
CodeFormat
TLC变量生成代码的顶层TLC程序的主要入口点
要在系统目标文件浏览器中显示的目标信息
一种机制,用于定义特定于目标的代码生成选项(以及与构建过程相关的其他参数),并在Configuration parameters对话框中显示它们
从另一个目标(比如嵌入式实时目标)继承选项的机制
注意,虽然系统目标文件是一个目标语言编译器(TLC)文件,但它包含嵌入式MATLAB®代码。在创建或修改系统目标文件之前,您应该掌握TLC和MATLAB语言的工作知识。目标语言编译器和脚本与函数(MATLAB)描述了TLC语言和MATLAB语言的特点和语法。
在阅读本节时,您可能需要参考代码生成器提供的系统目标文件。大多数这些文件都存储在目标特定的文件夹中
(开放).其他系统目标文件存储在matlabroot
/ rtw / c
(开放).matlabroot
/工具箱/ rtw /目标
系统目标文件命名和位置约定
系统目标文件必须位于MATLAB路径上的文件夹中,以便在系统目标文件浏览器中显示目标并在构建过程中调用目标。遵循系统目标文件和相关目标文件的位置和命名约定文件夹和文件命名约定.
系统目标文件结构
概述
本节介绍系统目标文件的结构和内容。下面的清单显示了系统目标文件的一般结构。注意,这不是系统目标文件的完整代码清单。该清单由组成系统目标文件的每个部分的摘录组成。
%%---------------------------- %% 头评论部分 %%---------------------------- %% 实时目标% % TMF SYSTLC:例子:my_target。初始注释包含用于STF浏览器的指令。%%文档、日期、版权和其他信息可以在. ...后面找到%选择文件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语句之前。
注释的存在使代码生成器能够检测系统目标文件。当打开System Target File Browser时,代码生成器会扫描MATLAB路径中带有格式化头注释的TLC文件。注释包含以下指令:
SYSTLC:出现在浏览器中的描述符。
TMF:要在构建过程中使用的模板生成文件(TMF)的名称。当选择目标器时,该文件名将显示在模板makefile田野代码生成窗格中的“配置参数”对话框。
使:
使
在构建过程中使用的命令。当选择目标器后,该命令将显示在使命令田野代码生成窗格中的“配置参数”对话框。
下面的标题注释来自
.matlabroot
/ rtw / c / ert /ert.tlc
%% SYSTLC:嵌入式编码器TMF: ert_default_tmf MAKE: make_rtw %% SYSTLC:为嵌入式编码器创建可视化C/ c++解决方案文件%% TMF: RTW。MAKE: make_rtw…
每个注释最多只能包含两行。
如果没有指定TMF
字段中的系统目标文件,该文件仍然有效。的值TemplateMakefile
参数指定的回调函数rtwgensettings。SelectCallback
.
指定的回调函数也可以使用rtwgensettings。SelectCallback
要更改外部模式参数的值,请使用ExtMode
,ExtModeTransport
,ExtModeMexFile
,或ExtModeIntrfLevel
.
你可以在头文件注释中指定多组指令。每个这样的组在System target File Browser中显示为不同的目标配置。在上面的示例中,前两行代码指定了ERT目标的默认配置。接下来的两行指定创建和构建一个微软®Visual c++®解决方案(. sln
)文件。下图显示了这些配置如何出现在系统目标文件浏览器中。
看到创建自定义目标器配置查看自定义头注释的示例。
TLC配置变量
系统目标文件的这一部分分配与整个代码生成过程相关的全局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变量,见比较不同产品的系统目标文件支持下载188bet金宝搏金宝app.语言
:唯一有效的值为C
,它支持金宝appC
或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
中使用Callback APIrtwgensettings。SelectCallback
.请注意
要使用回调,您必须设置:
rtwgensettings。版本= '1';
将上面的语句添加到配置RTW代码生成设置系统目标文件的部分。
rtwgensettings。本文建立
:这个结构字段定义了要继承选项的系统目标文件。看到继承目标选项.rtwgensettings。SelectCallback
:该结构字段指定一个SelectCallback
函数。你必须设定rtwgensettings。版本= '1';
否则你的回调将被忽略。SelectCallback
与目标相关联,而不是与其任何单个选项相关联。的SelectCallback
函数在以下情况下触发:加载模型。
更新“配置参数”对话框中的任何配置设置。
构建模型。
的
SelectCallback
函数用于设置(或禁用)特定于目标的配置参数。下面的代码安装一个
SelectCallback
功能:rtwgensettings。SelectCallback= 'my_select_callback_handler(hDlg,hSrc)';
的参数
SelectCallback
函数(hSrc处理)
是回调API函数使用的私有数据的句柄。请注意
如果您已经开发了自定义目标,并且希望它与模型引用兼容,则必须实现
SelectCallback
函数声明模型引用兼容性。看到金宝app支持模型参考.rtwgensettings。一个ctivateCallback
:此属性指定一个ActivateCallback
函数。的ActivateCallback
函数在模型的活动配置集更改时触发。这可能在模型加载期间发生,也可能在用户更改活动配置集时发生。下面的代码安装一个
ActivateCallback
功能:rtwgensettings。一个ctivateCallback = 'my_activate_callback_handler(hDlg,hSrc)';
的参数
ActivateCallback
函数(hSrc处理)
是回调API函数使用的私有数据的句柄。rtwgensettings。PostApplyCallback
:此属性指定aPostApplyCallback
函数。的PostApplyCallback
功能被触发,当用户单击应用或好吧在“配置参数”对话框中编辑选项后,单击。的PostApplyCallback
函数在将更改应用于配置集之后调用。下面的代码安装一个
PostApplyCallback
功能:rtwgensettings。PostApplyCallback = 'my_postapply_callback_handler(hDlg,hSrc)';
的参数
PostApplyCallback
函数(hSrc处理)
是回调API函数使用的私有数据的句柄。rtwgensettings。BuildDirSuffix
:大多数目标定义一个文件夹名称后缀,用于标识目标创建的构建文件夹。中定义的后缀追加生成过程rtwgensettings。BuildDirSuffix
字段添加到模型名称中,以形成构建文件夹的名称。例如,如果您定义rtwgensettings。BuildDirSuffix
如下rtwgensettings。BuildDirSuffix= '_mytarget_rtw'
命名构建文件夹
.模型
_mytarget_rtw
其他代码生成选项
使用TLC配置生成代码描述了额外的TLC代码生成变量。目标的最终用户可以通过输入窗体的MATLAB命令来分配这些变量
set_param (modelName TLCOptions, -aVariable =瓦尔”);
(有关更多信息,请参见为代码生成指定TLC.)
然而,首选的方法是在系统目标文件中使用下面的语句来分配这些变量:
%assign变量=瓦尔
为了便于阅读,我们建议您在系统目标文件的注释之后的部分中添加这样的赋值配置RTW代码生成设置.
模型参考注意事项
看到金宝app支持模型参考有关系统目标文件的重要信息,以及为支持代码生成器模型引用特性可能需要进行的其他修改。金宝app
定义和显示自定义目标选项
使用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的系统目标文件示例. |
|
选项的默认值(如果为空) |
|
必须 |
|
与该选项关联的模板makefile令牌(如果有的话)。的 |
modelReferenceParameterCheck |
指定该选项在引用模型及其父模型中是否必须具有相同的值。如果该字段未指定或有值“上” 选项值必须相同。如果指定了该字段并具有值“关闭” 选项值可以不同。看到控制配置选项值协议. |
|
元素,该元素不显示,但用于调用close或open回调。看到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变量被传递给回调函数,该回调函数显示菜单的当前值。编辑字段以双精度表示的信号记录缓冲区大小.
尝试在与“配置参数”对话框中的示例目标选项交互时学习示例代码。要与示例目标文件交互,
使
(开放)你的工作文件夹。matlabroot
/工具箱/ rtw / rtwdemos / rtwoptions_demo打开您选择的一个模型。
打开“配置参数”对话框,选择代码生成窗格。
点击浏览.系统目标文件浏览器打开。选择
usertarget.tlc
.然后单击好吧.观察到代码生成窗格包含自定义子选项卡:用户首选目标选项(I).
当您与此类别中的选项交互并打开和关闭配置参数对话框时,观察MATLAB命令窗口中显示的消息。这些消息是从系统目标文件中的代码或从系统目标文件调用的回调中打印出来的。
继承目标选项
ert.tlc
提供了一套基本的嵌入式编码器®代码生成选项。如果你的目标是基于ert.tlc
,您的系统目标文件通常应该继承在ERT中定义的选项。
使用rtwgensettings。本文建立
字段中rtwgensettings
结构来定义要从中继承选项的系统目标文件。您应该将自定义目标转换为使用这种机制,如下所示。
设置rtwgensettings。本文建立
字段值,如下例所示:
rtwgensettings。本文建立= 'stf.tlc';
在哪里月31
要从中继承选项的系统目标文件的名称。例如:
rtwgensettings。本文建立= 'ert.tlc';
当“配置参数”对话框执行这行代码时,它包含来自的选项stf.tlc
自动。如果stf.tlc
是已转换为新布局的MathWorks内部系统目标文件,则对话框使用新布局显示继承的选项。
处理不支持的选项。金宝app如果目标不支持从继承的所有选项金宝appert.tlc
,您应该检测不支持的选项设置,并显示警告或错金宝app误消息。在某些情况下,如果用户选择了目标不支持的选项,则可能需要中止构建过程。金宝app例如,如果您的目标不支持金宝app生成一个示例主程序选项,如果选择了该选项,则不应允许构建过程继续进行。
即使您的目标可能不支持所有继承的ERT选项,也需要将ERT选项保金宝app留在代码生成窗格中的“配置参数”对话框。不要简单地从金宝apprtwoptions
结构中的系统目标文件。选项必须在对话框中,以便代码生成器在执行优化时扫描。
例如,您可能希望阻止用户关闭单个输出/更新功能选择。从对话框中删除此选项并简单地分配TLC变量似乎是合理的CombineOutputUpdateFcns
来在
.但是,如果该选项未包含在对话框中,则代码生成器将假设输出和更新函数包含在对话框中不被合并。其结果是生成效率较低的代码。
自定义系统目标文件的技巧和技术
介绍
以下部分包括有关自定义系统目标文件的技术的信息,包括:
如何从系统目标文件调用自定义TLC代码
支持多种开发环境的方法金宝app
更新系统目标文件时的注意事项
所需和推荐%包括
如果您需要实现特定于目标的代码生成特性,我们建议您的系统目标文件包含TLC文件mytarget_genfiles.tlc
.
一旦您的系统目标文件设置了所需的TLC环境,您必须包含codegenentry.tlc
以启动标准代码生成过程。
mytarget_genfiles.tlc
提供了在主代码生成入口点之后执行自定义TLC代码的机制。看到使用mytarget_genfiles.tlc.
使用mytarget_genfiles.tlc。mytarget_genfiles.tlc
(可选)作为中心文件非常有用,可以从中调用特定于目标的TLC文件,这些文件可以在目标构建过程中生成额外的文件。例如,您的目标可以为开发环境创建子生成文件或项目文件,或者为调试器创建命令脚本来进行自动下载。
然后,构建过程可以直接从make过程调用这些生成的文件,也可以在可执行文件创建之后调用。这是用
机制,如使用STF_make_rtw_hook文件自定义构建过程.月31
_make_rtw_hook.m
下面的TLC代码显示了一个示例mytarget_genfiles.tlc
文件。
%selectfile NULL_FILE %assign ModelName = CompiledModel。%%创建调试器脚本%assign model_script_file = "%.cfg" %assign script_file = "debugger_script_template. cfg"%if RTWVerbose %selectfile STDOUT ### create % %selectfile NULL_FILE %endif %include "% " %openfile bld_file = "% " % %closefile bld_file
处理目标选项值的别名
本节描述在测试目标设备类型的用户指定值时可用于检测和解析别名值或遗留值(ProdHWDeviceType
)和代码替换库(CodeReplacementLibrary
).
RTW.isHWDeviceTypeEq。要测试两个目标设备类型值是否代表相同的硬件设备,调用以下函数:
result = RTW.isHWDeviceTypeEq(类型1,类型2)
在哪里
和类型1
是包含目标设备类型值或别名的字符向量。类型2
的RTW.isHWDeviceTypeEq
函数返回true
和类型1
是表示相同硬件设备的字符向量。例如,下面的调用返回true:类型2
RTW.isHWDeviceTypeEq(“指定”、“通用- >自定义”)
有关目标设备类型选项的说明ProdHWDeviceType
的命令行信息硬件实现面板参数设备供应商(金宝app模型)和设备类型(金宝app模型)。
RTW.resolveHWDeviceType。要返回硬件设备的设备类型值,给定一个可能是别名或遗留值的值,调用以下函数:
result = RTW.resolveHWDeviceType()类型)
在哪里
是包含目标设备类型值或别名的字符向量。类型
的RTW.resolveHWDeviceType
函数返回设备的设备类型值。例如,下面两个调用都返回“通用- >自定义”
:
RTW.resolveHWDeviceType(“指定”)RTW.resolveHWDeviceType(通用- >自定义)
有关目标设备类型选项的说明ProdHWDeviceType
的命令行信息硬件实现面板参数设备供应商(金宝app模型)和设备类型(金宝app模型)。
RTW.isTflEq。要测试两个代码替换库(CRL)名称是否表示相同的CRL,请调用以下函数:
result = RTW.isTflEq(name1,name2)
在哪里
和name1
是包含CRL值或别名的字符向量。name2
的RTW.isTflEq
函数返回true
和name1
是表示相同代码替换库的字符向量。例如,下面的调用返回true:name2
RTW.isTflEq('GNU','GNU C99 extensions')
的描述CodeReplacementLibrary
参数,看到代码替换库.
RTW.resolveTflName。要返回代码替换库的CRL值,给定一个可能是别名或遗留值的值,请调用以下函数:
result = RTW.resolveTflName(名字)
在哪里
是包含CRL值或别名的字符向量。名字
的RTW.resolveTflName
函数返回引用的代码替换库的值。例如,下面两个调用都返回GNU C99扩展
:
RTW.resolveTflName环球套票(GNU的)。resolveTflName('GNU C99 extensions')
的描述CodeReplacementLibrary
参数,看到代码替换库.
金宝app支持多种开发环境
您的目标可能需要支持多种开发环境(例如,两个或多金宝app个交叉编译器)或多种代码生成模式(例如,生成二进制可执行文件与为编译器生成项目文件)。
满足此需求的一种方法是实现多个系统目标文件。每个系统目标文件为开发环境调用一个模板生成文件。这相当于提供了两个独立的目标。
更新您的自定义系统目标文件
更新自定义系统目标文件可能会影响使用更新的系统目标文件加载的模型的选项值。如果禁用某个选项,更新后的系统目标文件将使用该选项的默认值。如果模型对该选项具有不同的值,那么当您使用更新的系统目标文件加载模型时,模型中的值将被丢弃,而系统目标文件将使用默认值。
创建自定义目标器配置
介绍
本教程可以补充中描述的示例目标指南示例自定义目标.对于介绍和示例文件,请先尝试示例目标。
本教程指导您完成创建基于ert的目标的过程,my_ert_target
.这个练习演示了几个任务,这是创建自定义目标的典型任务:
设置目标文件夹和修改MATLAB路径。
对标准系统目标文件和TMF进行修改,使自定义目标在系统目标文件浏览器中可见,继承ERT选项,显示特定于目标的选项,并使用默认的基于主机的编译器生成代码。
使用包含内联s函数的简单模型,使用自定义目标测试构建过程。
在此练习中,您将实现一个可操作的、但骨架的、基于ert的目标。这个目标可以作为自定义嵌入式目标完整实现的起点。
my_ert_target概述
在接下来的部分中,您将创建一个骨架目标,my_ert_target
.目标继承并支持ERT目标的标准选项,并在Conf金宝appiguration Parameters对话框中显示其他特定于目标的选项(参见my_ert_target的目标特定选项).
my_ert_target的目标特定选项
my_ert_target
金宝app支持基于工具链的构建,生成在主机系统上运行的代码和可执行文件。my_ert_target
使用低成本航空
编译器®平台。所选择的编译器随时可用,并随代码生成器一起分发。在Microsoft Windows平台上,如果使用不同的编译器,则可以设置低成本航空
通过以下MATLAB命令暂时作为默认编译器:
墨西哥人设置
该软件显示安装在计算机上的受支持编译器的链接。金宝app单击低成本航空
链接。
请注意
在Linux上®请确保安装了C编译器。如果是这样,您可以使用Linux文件夹语法来完成这个练习。
my_ert_target
还可以支持基于模板金宝app制作文件的构建。有关将此目标与模板makefile方法一起使用的详细信息,请参见创建基于ert的TMF.
你可以测试my_ert_target
使用与ERT目标兼容的模型(参见配置系统目标文件(嵌入式编码器))。生成的程序与ERT生成的程序操作相同。
为了简化目标的测试,请使用targetmodel
,一个非常简单的固定步骤模型(参见创建测试模型和s -函数).中的S-Function块targetmodel
的源代码timestwo
示例,并生成完全内联的代码。看到s函数的例子(金宝app模型)和带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
创建一个文件夹,
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:我的基于ert的目标TMF: my_ert_target_lcc。tmf MAKE: 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
在自定义系统目标文件末尾附近。该函数设置工具链遵从性的属性。
function enableToolchainCompliant(hSrc, hDlg) %以下参数使能toolchain合规。slConfigUISetVal(hDlg, hSrc, 'UseToolchainInfoCompliant', 'on');slConfigUISetVal(hDlg, hSrc, 'GenerateMakefile','on');%以下参数不需要符合工具链。但是,建议您设置这些默认值并禁用这些参数(如下所示)。slConfigUISetVal(hDlg, hSrc, 'RTWCompilerOptimization','off');slConfigUISetVal(hDlg, hSrc, 'MakeCommand','make_rtw');slconfiguistenabled (hDlg, hSrc, 'RTWCompilerOptimization',false);slconfiguisenabled (hDlg, hSrc, 'MakeCommand',false);结束
请注意
如果您正在使用模板makefile方法,请忽略从系统目标文件调用启用工具链遵从性的函数。相反,使用中的信息创建基于ert的TMF.
查看系统目标文件。此时,您可以验证目标是否继承并显示ERT选项,如下所示:
创建一个新模型。
打开模型资源管理器或配置参数对话框。
选择代码生成窗格。
点击浏览打开“系统目标文件”浏览器。
在文件浏览器中,滚动目标列表以查找新目标,
my_ert_target.tlc
.(此步骤假设您的MATLAB路径包含c: / / my_ert_target / my_ert_target工作
,如前所述创建目标文件夹.)选择
我的ert目标
并点击好的。的代码生成窗格现在显示该模型已为
my_ert_target.tlc
目标。的系统目标文件,语言,工具链,构建配置字段应该出现:选择我的目标选项窗格。控件中定义的三个复选框选项
rtwoptions
结构。选择代码生成窗格并重新打开“系统目标文件浏览器”。
选择嵌入式编码器目标(
ert.tlc
).目标显示标准的ERT选项。关闭模型。您不需要保存它。
骨架目标的系统目标文件已经完成。如果您正在使用工具链方法,您就可以为您的目标调用构建过程了。
如果你喜欢使用模板制作文件的方法,对TMF的引用,my_ert_target_lcc.tmf
,在系统目标文件头中的注释阻止您调用目标的构建过程,直到TMF文件到位。首先,您必须创建一个my_ert_target_lcc.tmf
文件。
创建基于ert的TMF
如果您将工具链生成文件方法与工具链兼容的自定义目标一起使用,则省略应用于模板生成文件方法的步骤。(跳过本节。)
如果您正在使用模板化的makefile方法,请遵循应用于TMF的步骤,并省略从系统目标文件文件调用启用工具链遵从性的函数,该函数在创建基于ert的工具链兼容的系统目标文件.
通过复制和修改LCC编译器的标准ERT TMF,为您的目标创建一个TMF:
确保您的工作文件夹仍然设置为您之前在其中创建的目标文件夹创建目标文件夹.
c: / / my_ert_target / my_ert_target工作
放置一份
在matlabroot
/ rtw / c / ert /ert_lcc.tmfc: / / my_ert_target / my_ert_target工作
重命名它my_ert_target_lcc.tmf
.该文件ert_lcc.tmf
是LCC编译器专用于ERT编译器的模板生成文件。开放
my_ert_target_lcc.tmf
在文本编辑器中。改变
SYS_TARGET_FILE
参数,以便文件引用为您的.tlc
文件在使
文件。换线SYS_TARGET_FILE = any
来
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函数的TLC实现。复制下面的C和TLC文件
timestwo
S-function到你的工作文件夹:matlabroot
/工具/模型/ s金宝appimdemos / simfeatures / src /timestwo.cmatlabroot
/工具/模型/ s金宝appimdemos / simfeatures / tlc_c /timestwo.tlc
构建
timestwo
MEX-file在c: / / my_targetmodel工作
.墨西哥人timestwo.c
使用Simulink中的S-Function块创建以下模型金宝app®用户定义函数库。将模型保存在您的工作文件夹中
targetmodel
.双击S-Function块,打开块参数对话框。输入s函数名称
timestwo
.点击好吧.块现在绑定到timestwo
MEX-file。打开模型资源管理器或配置参数对话框,然后选择解算器窗格。
设置求解器类型来
固定步
并点击应用.保存模型。
打开作用域,运行模拟。验证
timestwo
s函数的输入乘以2.0。
保持targetmodel
打开模型以在下一节中使用,在这一节中,您将使用测试模型生成代码。
验证目标操作
在本节中,您将配置targetmodel
为my_ert_target
自定义目标,并使用目标来生成代码并构建可执行文件:
在“配置参数”对话框中,选择代码生成窗格。
点击浏览打开“系统目标文件浏览器”。
在浏览器中,选择
我的ert目标
并点击好吧.“配置参数”对话框现在显示代码生成面板的
my_ert_target
.选择代码生成>报告窗格,并选择创建代码生成报告选择。
点击应用然后保存模型。该模型配置为
my_ert_target
.构建模型。如果构建成功,MATLAB命令窗口将显示以下消息。
###创建可执行文件:./targetmodel.exe ###成功完成模型:targetmodel的构建过程
您的工作文件夹包含
targetmodel.exe
文件和构建文件夹,targetmodel_my_ert_target_rtw
,其中包含生成的代码和其他文件。工作文件夹还包含一个slprj
文件夹,由构建过程内部使用。代码生成器还创建一个代码生成报告。
要查看生成的代码,请在C代码选项卡上,单击视图代码.在内容窗格中,单击
targetmodel.c
链接。在
targetmodel.c
,定位模型阶跃函数;targetmodel_step
.观察下面的代码。/* S-Function Block:
/S-Function */ /*输入乘以2 */ targetmodel_B。SFunction = targetmodel_B。正弦波* 2.0; 这个代码的存在证实了
my_ert_target
自定义目标为模型中的S-Function块生成了一个内联输出计算。