主要内容

自定义系统目标文件

本节提供关于系统目标文件的结构的信息、定制系统目标文件的指导原则,以及帮助您生成系统目标文件骨架的基本教程。

使用系统目标文件生成控制代码

系统目标文件控制构建过程的代码生成阶段。系统目标文件还允许您控制目标对最终用户的表示。系统目标文件提供

  • 对构建过程非常重要的变量的定义,例如CodeFormatTLC变量

  • 生成代码的顶级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要更改外部模式参数的值,ExtModeExtModeTransportExtModeMexFile,或ExtModeIntrfLevel

你可以在头注释中指定多组指令。每个这样的组在系统目标文件浏览器中显示为不同的目标配置。在上面的示例中,前两行代码指定ERT目标的默认配置。接下来的两行指定一个创建和构建微软®Visual c++®解决方案(. sln)文件。下图显示了这些配置如何出现在系统目标文件浏览器中。

看到创建自定义目标配置下面是自定义头注释的示例。

薄层色谱配置变量

系统目标文件的这一部分分配与整个代码生成过程相关的全局TLC变量。

对于嵌入式目标,在大多数情况下,您应该简单地使用ERT目标使用的全局TLC变量设置(ert.tlc).的系统目标文件使用“Embedded-C”CodeFormatTLC变量,并使用相应的rtwgensettings。本文建立= 'ert.tlc'RTW_OPTIONSTLC文件的部分。验证以下变量是否被赋值:

  • CodeFormat:CodeFormatTLC变量选择生成的代码特征。的“Embedded-C”值将由ERT目标使用。您应该指定基于ert的目标“Embedded-C”作为的值CodeFormat.这种选择是为生产代码、最小的内存使用、静态内存分配和生成代码的简化接口而设计的。

    的其他值的信息CodeFormatTLC变量,看到比较跨产品的系统目标文件支持2022世界杯八强谁会赢?

  • 语言:唯一有效的值C的支持Cc++由配置参数指定的代码生成TargetLang

  • TargetType:代码生成器定义预处理器符号RT而且NRT区分仿真代码和实时代码。这些符号在条件编译中使用。的TargetType变量决定RTNRT定义。

    大多数目标旨在生成实时代码。他们分配TargetType如下。

    %assign TargetType = "RT"

    有些目标,如模型参考仿真目标、加速仿真目标、RSim目标和s函数目标,只生成用于非实时使用的代码。这样的目标分配TargetType如下。

    %assign TargetType = "NRT"

TLC程序入口点和相关%包括

代码生成过程通常从codegenentry.tlc.系统目标文件调用codegenentry.tlc如下。

%包括“codegenentry.tlc”

请注意

codegenentry.tlc而较低层次的TLC文件则假设CodeFormatTargetType,语言已分配。在包含之前设置这些变量codegenentry.tlc

如果您需要实现特定于目标的代码生成特性,您应该包括TLC文件mytarget_genfiles.tlc在系统目标文件中。该文件提供了在调用之前和之后执行自定义TLC代码的机制codegenentry.tlc.有关此机制的信息,请参见

定制代码生成过程的另一种方法是调用较低级别的函数(通常由codegenentry.tlc),并在过程的每个阶段包括你自己的TLC功能。这种方法应该谨慎对待。看到薄层色谱文件为更多的信息。

调用的较低级函数codegenentry.tlc

  • genmap.tlc:将块名映射到相应的特定于语言的块目标文件。

  • commonsetup.tlc:设置全局变量。

  • commonentry.tlc:启动生成代码的过程。

RTW_OPTIONS节

RTW_OPTIONSSection受指令限制:

/% begin_rtw_options . .END_RTW_OPTIONS % /

第一部分RTW_OPTIONS的数组rtwoptions结构。这个结构在使用rtwoptions显示自定义目标选项

第二部分RTW_OPTIONS部分定义rtwgensettings,为代码生成过程定义生成文件夹名称和其他设置的结构。看到rtwgensettings结构和有关信息。rtwgensettings

rtwgensettings结构

系统目标文件的最后一部分定义rtwgensettings结构。对象中存储的信息模型.rtw文件,并由构建过程使用。的rtwgensettings目标开发人员最感兴趣的领域是

  • 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.tlc.该代码定义了rtwoptions结构数组。第一个(头)元素的默认字段被设置为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的系统目标文件示例

closecallback
(过时的)

不要使用closecallback
使用rtwgensettings。PostApplyCallback相反(见rtwgensettings结构).

closecallback将被忽略。

有关回调用法的示例,请参见使用自定义rtwoptions的系统目标文件示例

默认的

选项的默认值(如果类型按钮).

启用

必须“上”“关闭”.如果“上”,该选项显示为已启用项;否则,作为禁用项。

makevariable

与该选项关联的模板生成文件令牌(如果有的话)。的makevariable在处理模板生成文件期间展开。看到模板Makefile令牌

modelReferenceParameterCheck 指定选项是否必须在引用模型及其父模型中具有相同的值。如果该字段未指定或具有该值“上”选项值必须相同。如果指定了该字段并具有该值“关闭”选项值可以不同。看到控制配置选项值协议

NonUI

元素,该元素不显示,但用于调用关闭或打开回调。看到NonUI元素

opencallback
(过时的)

不要使用opencallback
使用rtwgensettings。SelectCallback相反(见rtwgensettings结构).

有关回调用法的示例,请参见使用自定义rtwoptions的系统目标文件示例

popupstrings

如果类型弹出popupstrings定义菜单中的项。项目由“|”(竖线)字符分隔。类的项mat文件变量名修饰符GRT目标使用的菜单。

“rt_ | _rt |没有的

提示

为该选项贴上标签。

tlcvariable

与该选项关联的TLC变量的名称。

工具提示

当鼠标放在项目上时显示的帮助文本。

类型

类型的元素:复选框编辑NonUI弹出按钮,或类别

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对话框中的示例目标选项进行交互。要与示例目标文件交互,

  1. 使matlabroot/工具箱/ rtw / rtwdemos / rtwoptions_demo开放)你的工作文件夹。

  2. 打开您选择的模型。

  3. 打开“配置参数”对话框并选择代码生成窗格。

  4. 点击浏览.打开系统目标文件浏览器。选择usertarget.tlc.然后单击好吧

  5. 观察到的代码生成窗格包含自定义子选项卡:首选目标选项(I)

  6. 当您与这个类别中的选项交互并打开和关闭配置参数对话框时,观察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过程调用这些生成的文件,也可以在可执行文件创建之后调用。这是用月31_make_rtw_hook.m机制,如使用STF_make_rtw_hook文件自定义构建过程

下面的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而且类型2表示相同硬件设备的字符向量。例如,下面的调用返回true:

RTW.isHWDeviceTypeEq(“指定”、“通用- >自定义”)

有关目标设备类型选项的说明ProdHWDeviceType的命令行信息硬件实现面板参数设备供应商而且设备类型

RTW.resolveHWDeviceType。要返回硬件设备的设备类型值,给定一个可能是别名或遗留值的值,调用以下函数:

结果= RTW.resolveHWDeviceType (类型

在哪里类型包含目标设备类型值或别名的字符向量。

RTW.resolveHWDeviceType函数返回设备的设备类型值。例如,以下调用都返回“通用- >自定义”

RTW.resolveHWDeviceType(“指定”)RTW.resolveHWDeviceType(通用- >自定义)

有关目标设备类型选项的说明ProdHWDeviceType的命令行信息硬件实现面板参数设备供应商而且设备类型

RTW.isTflEq。为了测试两个代码替换库名称是否代表相同的CRL,调用以下函数:

结果= RTW.isTflEq (name1name2

在哪里name1而且name2是包含CRL值或别名的字符向量。

RTW.isTflEq函数如果返回truename1而且name2表示相同代码替换库的字符向量。例如,下面的调用返回true:

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 -函数为进一步讨论timestwos函数的例子。

创建目标文件夹

创建文件夹来存储目标文件,并将它们添加到MATLAB路径,遵循推荐的约定(参见文件夹和文件命名约定).您还可以创建一个文件夹来存储测试模型、s -函数和生成的代码。

此示例假设您的目标文件夹和模型文件夹位于该文件夹中c: /工作.不要将您的目标和模型文件夹放在MATLAB文件夹树中(也就是说,在matlabroot文件夹)。

创建文件夹并使其可访问:

  1. 创建一个目标根文件夹,my_ert_target.在Windows平台上的MATLAB命令窗口中,输入:

    CD c:/work mkdir my_ert_target
  2. 在目标根文件夹中,创建一个子文件夹来存储目标文件。

    mkdir my_ert_target / my_ert_target
  3. 将这些文件夹添加到您的MATLAB路径中。

    Addpath c:/work/my_ert_target/my_ert_target . Addpath c:/work/my_ert_target
  4. 创建一个文件夹,my_targetmodel,以存储测试模型、s函数和生成的代码。

    mkdir my_targetmodel

创建基于ert的、符合工具链的系统目标文件

通过复制和修改ERT目标的标准系统目标文件,为目标创建一个系统目标文件。然后,通过在“系统目标文件浏览器”和“配置参数”对话框中查看新目标来验证系统目标文件。

编辑系统目标文件。要编辑系统目标文件,使用以下步骤:

  1. 将您的工作文件夹更改为您在其中创建的文件夹创建目标文件夹

    cd c: / / my_ert_target / my_ert_target工作
  2. 放置一份matlabroot/ rtw / c / ert /ert.tlcc: / / my_ert_target / my_ert_target工作然后重命名为my_ert_target.tlc.该文件ert.tlc是ERT目标的系统目标文件。

  3. 开放my_ert_target.tlc在您选择的文本编辑器中。

  4. 自定义系统目标文件,用指令替换头注释行,使系统目标文件在系统目标文件浏览器中可见,并定义相关的TMF。使命令和外部模式接口文件(如果有的话)。有关这些指令的更多信息,请参见头的评论

    中替换头注释my_ert_target.tlc使用以下头注释。

    %% SYSTLC: My ERT-based Target TMF: my_ert_target_lcc。tmf: make_rtw
  5. 该文件my_ert_target.tlc继承标准ERT选项,使用中描述的机制继承目标选择.因此,现有的rtwoptions结构定义是多余的。编辑RTW_OPTIONS部分,使其只包含以下代码。

    / % BEGIN_RTW_OPTIONS  %----------------------------------------% % 环球套票代码生成配置设置  % %----------------------------------------% rtwgensettings。BuildDirSuffix =“_ert_rtw”;END_RTW_OPTIONS % /
  6. 结束后删除代码RTW_OPTIONS部分,该部分由指令分隔BEGIN_CONFIGSET_TARGET_COMPONENT和END_CONFIGSET_TARGET_COMPONENT.此代码仅供MathWorks内部开发人员使用。

  7. 中的“生成文件夹”后缀rtwgenSettings中描述的约定的结构rtwgensettings结构

    属性的字符向量设置后缀_my_ert_target自定义目标,改变直线

    rtwgensettings。BuildDirSuffix= '_ert_rtw'

    rtwgensettings。BuildDirSuffix= '_my_ert_target_rtw'
  8. 修改rtwgenSettings结构从ERT目标继承选项,并声明Release 14或更高版本的兼容性rtwgensettings结构.将以下代码添加到rtwgenSettings定义:

    rtwgensettings。本文建立= 'ert.tlc'; rtwgensettings.Version = '1';
  9. 添加一个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 %/
  10. 将更改保存到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选项:

  1. 创建一个新模型。

  2. 打开模型资源管理器或配置参数对话框。

  3. 选择代码生成窗格。

  4. 点击浏览打开“系统目标文件”浏览器。

  5. 在文件浏览器中,滚动目标列表以查找新目标,my_ert_target.tlc.(这一步假设您的MATLAB路径包含c: / / my_ert_target / my_ert_target工作,如前所述创建目标文件夹.)

  6. 选择我的ERT-based目标并点击好的。

  7. 代码生成窗格现在显示已为my_ert_target.tlc目标。的系统目标文件语言工具链,构建配置字段应该出现:

  8. 选择我的目标选择窗格。对象中定义的三个复选框选项rtwoptions结构。

  9. 选择代码生成窗格并重新打开系统目标文件浏览器。

  10. 选择嵌入式编码器目标(ert.tlc).目标将显示标准ERT选项。

  11. 关闭模式。你不需要保存它。

骨骼目标的系统目标文件已经完成。如果您正在使用工具链方法,则可以为目标调用构建过程。

如果您更喜欢使用模板生成文件方法,对TMF的引用,my_ert_target_lcc.tmf,在系统目标文件头注释中,可以阻止您在TMF文件到位之前为目标调用构建过程。首先,您必须创建一个my_ert_target_lcc.tmf文件。

创建基于ert的模板MakeFile

如果您正在使用带有工具链兼容的自定义目标的工具链生成文件方法,请忽略应用于模板生成文件方法的步骤。(跳过这一节。)

如果您正在使用模板生成文件方法,请遵循适用于模板生成文件的步骤,而忽略从系统目标文件调用启用工具链遵从性的函数,该函数在创建基于ert的、符合工具链的系统目标文件

通过复制和修改提供的ERT模板生成文件,为目标创建模板生成文件。选择最适合您的目标的模板生成文件。这个示例使用ert_lcc64.tmf,但你也可以用ert_vcx64.tmfert_unix.tmf

  1. 确保您的工作文件夹仍然设置为您之前在其中创建的目标文件夹创建目标文件夹

    c: / / my_ert_target / my_ert_target工作
  2. 放置一份matlabroot/工具箱/编码器/编译/ tmf / ert_lcc64.tmfc: / / my_ert_target / my_ert_target工作重命名它my_ert_target_lcc.tmf.该文件ert_lcc64.tmf是用于LCC编译器的ERT编译器特定模板生成文件。

  3. 开放my_ert_target_lcc.tmf在文本编辑器中。

  4. 改变SYS_TARGET_FILE参数的文件引用.tlc文件在使文件。改变行

    SYS_TARGET_FILE =任何

    SYS_TARGET_FILE = my_ert_target.tlc
  5. 将更改保存到my_ert_target_lcc.tmf并关闭该文件。

您的目标现在可以生成代码并构建基于主机的可执行文件。在下一节中,您将创建一个测试模型,并使用my_ert_target

创建测试模型和s -函数

在本节中,您将构建一个简单的测试模型,以便稍后在代码生成中使用:

  1. 将工作文件夹设置为c: / / my_targetmodel工作

    cd c: / / my_targetmodel工作

    在本教程的其余部分中,my_targetmodel假定为工作文件夹。目标将代码生成过程的输出文件写入工作文件夹中的构建文件夹中。类生成内联代码时timestwoS-function,构建过程在工作文件夹中查找S-function的TLC实现。

  2. 复制以下C和TLC文件timestwoS-function到你的工作文件夹:

    • matlabroot/工具/模型/ simdemos / simfeatures / src /timestwo.c

    • matlabroot/工具/模型/ simdemos / simfeatures / tlc_c /timestwo.tlc

  3. 构建timestwoMEX-file在c: / / my_targetmodel工作

    墨西哥人timestwo.c
  4. 使用Simulink中的S-Function块创建以下模型®用户定义的函数库。将模型保存在您的工作文件夹中为targetmodel

  5. 双击S-Function块,打开块参数对话框。输入s函数名timestwo.点击好吧.块现在绑定到timestwoMEX-file。

  6. 打开模型资源管理器或配置参数对话框,并选择解算器窗格。

  7. 设置解算器类型固定步并点击应用

  8. 保存模型。

  9. 打开作用域并运行一个模拟。验证timestwos函数将其输入乘以2.0。

保持targetmodel模型开放以在下一节中使用,在这一节中您将使用测试模型生成代码。

验证目标操作

在本节中进行配置targetmodelmy_ert_target自定义目标,并使用目标生成代码和构建可执行文件:

  1. 在“配置参数”对话框中,选择代码生成窗格。

  2. 点击浏览打开“系统目标文件浏览器”。

  3. 在浏览器中,选择我的ERT-based目标并点击好吧

  4. “配置参数”对话框现在显示代码生成面板的my_ert_target

  5. 选择代码生成>报告窗格并选择创建代码生成报告选择。

  6. 点击应用并保存模型。模型已配置为my_ert_target

  7. 构建的模型。如果构建成功,MATLAB命令窗口将显示下面的消息。

    成功完成模型:targetmodel的构建过程

    您的工作文件夹包含targetmodel.exe文件和构建文件夹,targetmodel_my_ert_target_rtw,其中包含生成的代码和其他文件。工作文件夹还包含slprj文件夹,由构建过程在内部使用。

    代码生成器还创建一个代码生成报告。

  8. 要查看生成的代码,请在C代码选项卡上,单击视图代码.在内容窗格中的代码生成报告,单击targetmodel.c链接。

  9. targetmodel.c,定位模型阶跃函数,targetmodel_step.遵守以下代码。

    /* S-Function块:/S-Function */ /*将input乘以两个*/ targetmodel_B. /SFunction = targetmodel_B。SineWave * 2.0;

    这段代码的存在证实了my_ert_target自定义目标为模型中的S-Function块生成内联输出计算。

相关的话题

Baidu
map