目标开发文件夹、文件和构建
目标开发机制适用于许多文件夹和文件类型。以下主题提供了开发自定义目标、配置文件夹使用以及在构建过程中使用自定义目标的信息。
文件夹和文件命名约定
您可以为您的自定义目标文件使用单个文件夹,或者如果需要,您可以使用子文件夹,例如包含与特定开发环境或工具相关的文件。
对于自定义目标实现,推荐的文件夹和文件命名约定为
使用只有文件夹名、文件名和扩展名小写。
不要在文件夹名称中嵌入空格。在许多第三方开发环境中,文件夹名称中的空格会导致错误。
在MATLAB中包含所需的文件夹®路径
做不将自定义目标文件夹放置在MATLAB文件夹树中的任何位置(即
文件夹)。如果你把文件夹放在matlabroot
matlabroot
如果安装新的MATLAB版本(或重新安装当前版本),则有可能丢失工作。
以下部分将解释如何组织目标文件夹和文件,并将它们添加到MATLAB路径中。它们还提供文件的高级描述。
在本文件中,mytarget
是一个占位符名称,表示使用目标名称的文件夹和文件。的名字dev_tool1
,dev_tool2
,等等表示子文件夹,其中包含与开发环境或工具相关的文件。本文档描述了一个示例结构,其中文件夹mytarget
包含子文件夹mytarget
,块
,dev_tool1
,dev_tool2
.顶级文件夹mytarget
是目标根文件夹.
自定义目标的组件
概述
自定义目标的组件是位于文件夹层次结构中的文件。这个结构中的顶级文件夹称为目标根文件夹.目标根文件夹及其内容根据中描述的约定命名、组织并位于MATLAB路径上文件夹和文件命名约定.
自定义目标的组件包括
代码组件:监督和支持生成的模型代码执行的C源代码。金宝app
控制文件:
控制代码生成过程的系统目标文件。
文件,以控制从生成的代码构建可执行文件。在传统的基于make的环境中,模板生成文件(TMF)为此目的生成一个makefile。另一种方法是生成支持现代集成开发环境(IDE)的项目文件,例如Freescale™Semicond金宝appuctor CodeWarrior®IDE。
钩子文件:可选的TLC和MATLAB程序文件,可以在构建过程定义良好的阶段调用它们。钩子文件允许您自定义构建流程,并在流程的各个阶段之间传递信息。
其他目标文件:允许您将目标集成到MATLAB环境中的文件。例如,您可以提供一个
info.xml
文件,使您的目标块库和示例可从MATLAB会话。
接下来的部分将介绍开发每个组件所需了解的关键概念和术语。提供了更详细的信息源的参考。
代码组件
包含从Simulink生成的代码的可执行程序金宝app®模型由若干代码模块和数据结构组成。它们分为两类:应用程序组件和执行支持文件。金宝app
应用程序组件。应用程序组件是那些特定于特定模型的组件;它们实现由模型中的块表示的功能。应用程序组件不是特定于目标的。应用程序组件包括
从模型生成的模块
用户编写的块(s -函数)
模型的参数是可见的,并且可以与外部代码连接
执行支持文件。金宝app若干代码模块和数据结构,统称为执行支持文件金宝app,负责管理和支持生成程序的执行。金宝app执行支持文件模块不会自动生成金宝app。根据目标的需求,您必须实现执行支持文件的某些部分。金宝app执行支持文件金宝app总结执行支持文件。金宝app
执行支持文件金宝app
你提供…… | 代码生成器提供… |
---|---|
定制主程序 |
通用主程序 |
运行模型的计时器中断处理程序 |
执行引擎和集成求解器(由计时器中断处理程序调用) |
其他中断处理程序 |
示例中断处理程序(异步中断块) |
设备驱动程序 |
设备驱动程序示例 |
数据记录、参数调优、信号监控和外部模式支持金宝app |
数据记录、参数调优、信号监控和外部模式api |
用户编写的执行支持文件。金宝app代码生成器提供了大部分执行支持文件。金宝app根据目标的需求,您必须实现以下部分或全部元素:
一个计时器中断服务程序(ISR)。计时器以程序的基本采样率运行。定时器ISR负责必须在单个时钟周期内完成的操作,例如计算当前输出样本。定时器ISR通常调用
rt_OneStep
函数。如果您的目标是实时操作系统(RTOS),则生成的代码通常在RTOS提供的定时和任务管理机制的控制下执行。在这种情况下,您可能不需要实现计时器ISR。
的主程序.主程序初始化模型中的块,安装计时器ISR,并执行后台任务或循环。定时器周期性地中断主循环。如果主程序被设计为运行有限的时间,它还负责在终止程序之前执行清理操作——例如内存回收和屏蔽计时器中断。
如果您的目标是实时操作系统(RTOS),那么您的主程序很可能生成任务(对应于模型中使用的采样率),其执行由RTOS计时并控制。
主程序通常基于生成的或静态的主程序。有关执行支持文件的结构、代码执行和自定义主程序指南的详细信息,请参见金宝app将生成的独立可执行程序部署到目标硬件(嵌入式编码)。
其他中断处理程序.如果您的模型需要支持异步事件,例如硬件生成的中金宝app断和异步读写操作,那么您必须提供中断处理程序。中断模板库提供了一些例子。
数据记录、参数调优、信号监控和外部模式支持金宝app.在嵌入式目标中实现快速原型功能(如外部模式支持)是不典型的。金宝app但是,可以通过使用标准代码生成器api来支持这些特性。金宝app看到数据交换接口获取详细信息。
控制文件
代码生成和构建过程由一些TLC和MATLAB文件共同指导控制文件.本节介绍和总结了主要的控制文件。
顶层控制文件(make_rtw)。当您按下按钮时,将启动构建过程Ctrl + B.此时,构建过程将解析使命令字段代码生成窗格中的配置参数对话框,期望找到控制构建过程的MATLAB命令的名称(以及该命令的可选参数)。默认命令为make_rtw
,构建过程的默认顶级控制文件为make_rtw.m
.
请注意
make_rtw
是构建过程使用的内部MATLAB命令。通常,目标开发人员不需要详细的知识make_rtw
的工作原理。(目标开发人员的详细信息描述在目标开发和构建过程)。你不应该调用make_rtw
直接从MATLAB代码,你不应该自定义make_rtw.m
.
的make_rtw.m
文件包含执行特定于目标的控制文件所需的逻辑,包括用于执行自定义代码的许多钩子点。make_rtw
做以下事情:
将可选参数传递给构建过程
在代码生成之前执行所需的预处理
执行系统目标文件以执行代码生成(以及可选的HTML报告生成)
处理TMF以生成一个makefile
调用make实用程序来执行makefile并构建可执行文件
执行所需的后处理(如生成校准数据文件或将生成的可执行文件下载到目标)
系统目标文件。目标语言编译器(TLC)根据Simulink块图的部分描述(金宝app
).目标语言编译器读取模型
.rtw
并执行由几个目标文件(模型
.rtw.tlc
文件。)系统目标文件位于该程序的顶层,控制代码生成过程。这个过程的输出是许多源文件,它们被提供给您的开发系统的make实用程序。
您需要创建一个定制的系统目标文件来为您的目标设置代码生成参数。您应该复制、重命名和修改标准ERT系统目标文件(
).matlabroot
/ rtw / c / ert /ert.tlc
中描述了系统目标文件的详细结构自定义系统目标文件.
请注意
系统目标文件选择目标是否支持用于代码生成的工具链方法或模板生成文件方法。金宝app看到自定义系统目标文件.
模板生成文件(TMF)。TMF提供关于您的模型和开发系统的信息。构建过程使用此信息创建makefile (楼上
文件),构建可执行程序。
一些目标实现了多个TMF,以支持多个开发环境(例如,两个或多个交叉编译器)或多种代码生成模式(例如,生成二进金宝app制可执行文件与为编译器生成项目文件)。
嵌入式编码器®软件提供了大量适合不同类型开发计算机系统的tmf。这些tmf位于
(开放).中描述了标准tmf模板制作文件和制作选项.matlabroot
/ rtw / c / ert
TMF的详细结构描述在自定义模板生成文件.
请注意
系统目标文件选择目标是否支持用于代码生成的工具链方法或模板生成文件方法。金宝app看到自定义系统目标文件.
钩的文件。构建过程允许您提供可选的钩的文件在代码生成和制作过程中的指定点执行。可以使用钩子文件将特定于目标的操作添加到构建过程中。
钩子文件必须遵循定义良好的命名和位置要求。文件夹和文件命名约定描述这些需求。
目标根目录下的关键文件夹(mytarget)
目标目录(mytarget)
此文件夹包含目标的关键子文件夹(请参阅文件夹和文件命名约定).您还可以定位其他文件(例如自述
文件)在目标根文件夹。以下部分描述了必需的和可选的子文件夹及其内容。
目标文件夹:mytarget/mytarget
此文件夹包含目标的中心文件,例如系统目标文件(系统目标文件)和模板makefile (TMF)。目标文件夹中的关键文件(mytarget/mytarget)总结应存储在其中的文件mytarget / mytarget
,并提供指向有关这些文件的详细信息的指针。
请注意
mytarget / mytarget
应该在MATLAB路径上。
目标块文件夹(mytarget/blocks)
如果目标包括设备驱动程序或其他块,请在此文件夹中找到块实现文件。mytarget /块
包含
编译块墨西哥文件
块的源代码
TLC内联文件的块
块的库模型(如果你在一个或多个库中提供你的块)
请注意
mytarget /块
应该在MATLAB路径上。
您还可以将示例模型和支持文件存储在金宝appmytarget /块
.或者,您可以创建一个mytarget / mytargetdemos
文件夹,它也应该在MATLAB路径上。
要在标准Simulink Library Browser中显示您的块和/或将示金宝app例模型集成到MATLAB会话环境中,您可以创建下面描述的文件并将它们存储在其中mytarget /块
.
mytarget /块/ slblocks.m。该文件允许将一组块集成到Simulink库和Simulink库浏览器中。金宝app
“Blocksets and Toolboxes”子系统blkStruct。Name = sprintf('嵌入式目标\n for MYTARGET');blkStruct。OpenFcn = 'mytargetlib';blkStruct。MaskDisplay = 'disp(" MYTARGET ")';Simulink Library浏览金宝app器浏览器的%信息(1)。库= 'mytargetlib';浏览器(1)。Name = '嵌入式目标MYTARGET';浏览器(1)。这个库是“扁平的”(即没有子系统)吗? blkStruct.Browser = Browser;
mytarget /块/ demos.xml。该文件提供了关于示例模型的组件、组织和位置的信息。MATLAB软件使用这些信息将示例放置在MATLAB会话环境中。
<?XML版本="1.0"编码="utf-8"?>Embedded Target for MYTARGET simulink $toolbox/matlab/icons/boardicon.gif mytarget_overview.html mytarget_overview.html mytarget_model
开发工具文件夹(mytarget/dev_tool1, mytarget/dev_tool2)
这些文件夹包含与特定开发环境或工具相关的文件(dev_tool1
,dev_tool2
等)。通常,您的目标至少支持一个这样的开发环境,并金宝app在构建过程中调用其编译器、链接器和其他实用程序。mytarget / dev_tool1
包括链接器命令文件、启动代码、钩子函数和支持此过程所需的其他文件。金宝app
对于每个开发环境,您都应该提供一个单独的文件夹。
目标源代码文件夹(mytarget/src)
这个文件夹是可选的。如果目标的复杂性需要它,您可以使用mytarget / src
存储公共源代码和配置代码(例如引导和启动代码)。
目标文件夹中的关键文件(mytarget/mytarget)
介绍
目标文件夹mytarget / mytarget
包含目标实现中的关键文件。这些文件包括系统目标文件、模板makefile、主程序模块以及可选的M和TLC钩子文件,它们允许您将特定于目标的操作添加到构建过程中。下面几节描述关键目标文件夹文件。
mytarget.tlc
mytarget.tlc
是系统目标文件。系统目标文件的功能包括
使目标在系统目标文件浏览器中可见
定义目标的代码生成选项(继承的和特定于目标的)
为TLC代码生成过程的顶级控制提供一个入口点
您应该以系统目标文件为基础ert.tlc
,嵌入式编码器软件提供的系统目标文件。
自定义系统目标文件提供关于系统目标文件结构的详细信息,还提供了如何自定义系统目标文件的说明
在系统目标文件浏览器中显示目标
将您自己的目标选项添加到“配置参数”对话框
根据目标的需求定制代码生成和构建过程
mytarget.tmf
mytarget.tmf
是用于为目标构建可执行文件的模板生成文件。
有关模板makefile的结构和操作的基本信息,请参见自定义模板生成文件.
mytarget_genfiles.tlc
这个文件是可选的。mytarget_genfiles.tlc
作为一个中心文件非常有用,可以从中调用特定于目标的TLC文件,这些文件生成额外的文件,作为目标构建过程的一部分。例如,您的目标可以为开发环境创建子makefile或项目文件,或者为调试器创建命令脚本以进行自动下载。看到使用mytarget_genfiles.tlc获取详细信息。
mytarget_main.c
你的目标需要一个主程序模块。要提供一个主模块,您可以选择
修改
rt_main.c
或rt_cppclass_main.cpp
软件提供的模块生成
mytarget_main.c
或. cpp
在构建过程中
有关主程序操作的说明,请参见将生成的独立可执行程序部署到目标硬件(嵌入式编码)。本节还包含生成和修改主程序模块的指导方针。
STF_make_rtw_hook.m
是可选钩子文件,可用于在构建过程中的指定点调用特定于目标的函数或可执行文件。月31
_make_rtw_hook.m
方法实现一个函数,该函数将调度到特定操作月31
_make_rtw_hook.m方法
参数。
使用STF_make_rtw_hook文件自定义构建过程控件的操作
钩文件的详细说明。月31
_make_rtw_hook.m
STF_rtw_info_hook。(过时的)
在版本14之前,自定义目标通过钩子文件(称为
).的月31
_rtw_info_hook.m
指定的属性,例如整数数据类型的字长(例如,月31
_rtw_info_hook字符
,短
,int
,长
)和自定义目标的特定于C实现的属性。
的
机制已被硬件实现窗格中的“配置参数”对话框。使用此对话框,您可以指定以前在您的月31
_rtw_info_hook
文件。月31
_rtw_info_hook
为了向后兼容,存在
文件仍然可用。但是,您应该转换您的目标和模型来使用硬件实现窗格。看到配置运行时环境选项.月31
_rtw_info_hook
info.xml
此文件向MATLAB软件提供信息,指定在MATLAB会话环境中显示目标工具箱的位置。有关更多信息,请参见显示自定义文档(MATLAB)。
mytarget_overview.html
按照约定,该文件作为目标示例的主页。
的<描述>
场demos.xml
应该指向mytarget_overview.html
(见mytarget /块/ demos.xml).
使用实例mytarget_overview.html文件
Embedded Target for MYTARGET
外部开发目标的附加文件
介绍
如果您正在开发一个未安装到MATLAB树中的嵌入式目标,则应该在其中提供目标设置脚本和目标文档mytarget / mytarget
,以方便用户使用。以下部分描述了所需的材料和放置它们的位置。
mytarget / mytarget / mytarget_setup.m
该文件脚本将目标路径添加到MATLAB路径中。您的文档应该指导用户在安装目标时运行该脚本。
您应该包含对MATLAB函数的调用savepath
在你的mytarget_setup.m
脚本。该功能保存已添加的路径,需要用户运行mytarget_setup.m
只有一次。
下面的代码就是一个例子mytarget_setup.m
文件。
函数mytarget_setup() curpath = pwd;Tgtpath = curpath(1:end-length('\mytarget'));目录fullfile (tgtpath mytarget));目录fullfile (tgtpath dev_tool1));目录fullfile (tgtpath '块'));目录fullfile (tgtpath mytargetdemos));savepath;disp('MYTARGET目标路径设置完成。');
mytarget / mytarget /医生
你应该把与你的目标相关的文档放在文件夹里mytarget / mytarget /医生
.
目标开发和构建过程
关于构建过程
要开发嵌入式目标,您需要全面了解构建过程。您的嵌入式目标使用构建过程,并且可能要求您修改或自定义该过程。中给出了代码生成和构建过程的一般概述代码生成和构建过程.
本节补充了由Embedded Coder软件定制的构建过程的描述。重点是流程中可以使用定制挂钩的点,以及在流程的不同阶段之间传递信息。
本节以附加信息传递技巧,描述了在构建过程中传递信息的各种技巧和技巧。
构建过程阶段和信息传递
理解构建过程在何处(以及何时)获得所需的信息是很重要的。信息来源包括
的
文件,该文件提供关于生成模型的信息。在模型
.rtw
可用于目标TLC文件。模型
.rtw“配置参数”对话框的代码生成窗格。选项(通用的和特定于目标的)通过复选框、菜单和编辑字段提供。中的TLC变量与选项关联
rtwoptions
数据结构。使用配置参数>代码生成>自定义代码>其他构建信息>定义了字段来定义makefile令牌。选定的工具链(用于工具链方法构建)或选定的模板生成文件
.tmf
(用于模板makefile方法构建);这些生成特定于模型的makefile。主机上的环境变量。环境变量提供有关已安装开发工具的附加信息。
其他特定于目标的文件,如与目标相关的TLC文件、链接器命令文件或项目文件。
理解构建过程的几个阶段以及如何在各个阶段之间传递信息也很重要。构建过程包括几个高级阶段:
顶层文件的执行(
slbuild.m
或rtwbuild.m
)以按目标的构建过程进行排序将模型转换为TLC输入文件(
)模型
.rtw由TLC编译器生成目标代码
编译生成的代码
使
或其他公用事业使用调试器或下载实用程序将最终生成的可执行文件传输到目标硬件
将流程的每个阶段看作维护自己数据的不同“环境”是有帮助的。这些环境包括
MATLAB代码执行环境(MATLAB)
金宝app
目标语言编译器执行环境
makefile
开发环境,如和IDE或调试器
在每个环境中,您都可能从上面提到的各种来源获得信息。例如,在TLC阶段,可能会执行MATLAB文件以从MATLAB环境中获取信息。同样,给定的阶段可以为后续阶段生成信息。
看到目标文件夹中的关键文件(mytarget/mytarget)关于可用的MATLAB文件和TLC钩子信息传递的详细信息,并带有代码示例。
附加信息传递技巧
本节描述了许多用于在构建过程的不同阶段之间传递信息的有用技术。
rtwoptions结构中的tlcvariable字段。“配置参数”对话框的代码生成窗格上的参数可以与TLC变量相关联,并在tlcvariable
属性中选项项的rtwoptions
结构。调用TLC时在命令行上传递变量值。这提供了一种在TLC阶段提供代码生成参数及其值的方法。
看到系统目标文件结构获取更多信息。
在rtwoptions结构中创建可变字段。方法中指定的模板makefile令牌与代码生成参数关联makevariable
属性中选项项的rtwoptions
结构。类名称相同的标记makevariable
如果TMF中存在名称,则在创建最终的makefile时,令牌将使用选项值更新。如果令牌在TMF中不存在,则makevariable
调用make时在命令行上传入。因此,在任何一种情况下makevariable
可用于生成文件。
看到系统目标文件结构获取更多信息。
访问主机环境变量。的命令行,可以访问主机shell环境变量采用
命令。例如:
getenv ('MSDEVDIR') ans = D:\ application \Microsoft Visual Studio\Common\MSDev98
要从TLC访问相同的信息,请使用函数宏指令
调用的指令采用
.
%assign eVar = FEVAL("getenv","")
向模板Makefile提供开发环境信息。嵌入式目标必须将构建过程与安装在主机上的特定于目标的开发工具联系起来。为了让make进程运行这些工具,TMF必须能够确定工具的名称、到编译器、链接器和其他实用程序的路径,可能还包括主机操作系统环境变量设置。
要求最终用户修改目标TMF。用户输入路径信息(例如编译器可执行文件的位置),并可能将宿主操作系统环境变量作为make变量。这使得TMF可以针对特定的需求进行调整。
使用MATLAB应用程序数据。应用程序数据为应用程序提供了一种保存和检索使用GUI存储的数据的方法。此技术使您能够为对象创建本质上是用户定义的属性,并使用此属性存储用于构建过程的数据。如果您不熟悉这种创建图形用户界面的技术,请参见将数据存储为应用程序数据(MATLAB)。
下面的代码示例说明了如何使用应用程序数据将信息传递给TLC。
这个文件,tlc2appdata.m
,存储数据
作为传入名称下的应用程序数据传入(appDataName
).
function k = tlc2appdata(appDataName,data) disp([mfilename,': ',appDataName,' ', data]);setappdata (0 appDataName数据);K = 0;% TLC期望FEVAL的返回值。
下面的示例TLC文件使用函数宏指令
调用的指令tlc2appdata.m
在名称下存储任意应用程序数据z80
.
% %测试。tlc %% %assign myApp = "z80" %assign myData = "314159" %assign dummy = FEVAL("tlc2appdata",myApp,myData)
要测试这个技巧:
创建
tlc2appdata.m
文件如下所示。检查tlc2appdata.m
存储在MATLAB路径下的文件夹中。如图所示创建TLC文件。另存为
test.tlc
.在MATLAB提示符下输入以下命令执行TLC文件:
tlc test.tlc
在MATLAB提示符下获取应用程序数据:
K = getappdata(0,'z80')
函数返回值为314159。
输入以下命令。
谁
请注意,应用程序数据并不存储在MATLAB工作区中。还可以观察到z80数据不可见。以这种方式使用应用程序数据的优点是不会使MATLAB工作空间混乱。此外,它还有助于防止意外删除数据,因为数据不是直接存储在工作空间中。
应用程序数据的实际用途可能是从
将其归档并存储,以便稍后在构建过程中使用。模型
.rtw
向Makefile添加特定于块的信息。的rtwmakecfg
机制为内联的s函数(如驱动块)提供了一种方法,可以向makefile中添加信息。该机制在使用rtwmakecfg。m API自定义生成的Makefiles.