在Simulink环境中构建集成代码金宝app
工作流
要构建集成生成的代码和外部C或c++代码的可执行程序,请遍历此表中的任务。
任务 |
行动 |
更多的信息 |
---|---|---|
1 |
选择一种构建方法。 |
基于Simulink模型的建筑代码生成方法金宝app(嵌入式编码) 有关示例,请参见实时系统的构建过程工作流(嵌入式编码). |
2 |
为外部代码配置构建过程支持。金宝app |
为集成代码构建过程配置参数(嵌入式编码) |
3. |
为外部代码配置S-Function构建支持。金宝app |
构建对s -金宝app函数的支持(嵌入式编码) 使用makecfg为S-Functions定制生成的makefile文件(嵌入式编码) 有关示例,请参见从模型和生成的代码调用外部C代码(嵌入式编码)而且调用可重用的外部算法代码进行仿真和代码生成(嵌入式编码). |
4 |
配置构建过程以查找外部代码源、库和头文件。 |
管理构建过程文件依赖项(嵌入式编码) 在构建期间控制库的位置和命名(嵌入式编码) |
5 |
设置外部代码集成所需的自定义构建处理。 |
有关构建过程自定义工作流,请参见自定义代码生成后构建处理(嵌入式编码). 若要将构建自定义自动应用到工具链方法构建,请参见使用sl_customization.m自定义构建过程(嵌入式编码). 若要将构建自定义自动应用到模板生成文件方法构建,请参见使用STF_make_rtw_hook文件自定义构建过程(嵌入式编码). |
为集成代码构建过程配置参数
该表提供了模型配置参数的指南代码生成>自定义代码窗格的“模型配置参数”对话框,该对话框支持外部代码集成的构建过程。金宝app有关外部代码的文件夹的信息,请参见管理构建过程文件夹(嵌入式编码).如果选择将外部代码放在代码生成文件夹,请参阅在构建文件夹中保存外部代码文件(嵌入式编码).
来 | 选择 |
---|---|
将包含头文件的包含文件夹添加到构建过程中 |
代码信息>包括目录,并输入文件夹的绝对路径或相对路径。 如果您指定相对路径,路径必须相对于包含您的模型文件的文件夹,而不是相对于构建文件夹。指定文件夹的顺序就是搜索头文件、源文件和库文件的顺序。 |
添加要编译和链接的源文件 |
代码信息>源文件,然后输入文件的完整路径或仅输入文件名。 如果文件在当前MATLAB中,则只需输入文件名®文件夹或其中一个包含文件夹。对于您指定的每个附加源,构建过程将展开模板makefile中源文件所在文件夹的通用规则。例如,如果源文件位于文件夹 %。obj: buildir \企业\ % c (CC) - c fo (@F)美元(CFLAGS) <美元 构建过程按照您列出源文件的顺序添加规则。 |
添加要链接的库 |
代码信息>库,并输入库的完整路径或仅输入文件名。 如果库位于当前MATLAB文件夹或其中一个包含文件夹中,则只需输入文件名。 |
使用与模拟所指定的相同的自定义代码设置MATLAB函数块,Stateflow®图表和真值表块 |
使用与模拟目标相同的自定义代码设置 该参数指模拟目标窗格中的配置参数。 |
允许库模型使用与库所链接到的父模型惟一的自定义代码设置 |
使用本地自定义代码设置(不从主模型继承) 此参数仅对包含MATLAB函数块、状态流程图或真值表块。 |
在构建文件夹中保存外部代码文件
默认情况下,构建过程删除外部源文件。您可以按照以下指导原则保存外部源文件。
如果你放一个. c . cpp /
或.h
源文件在构建文件夹中,并且您希望防止代码生成器在TLC代码生成过程中删除它,请插入文本目标特定文件
的第一行. c . cpp /
或.h
文件。例如:
/* COMPANY-NAME目标指定文件* *该文件创建用于* COMPANY-NAME目标。它被用于……* /…
确保如前面示例所示,将文本拼写为“target specific file”,并且文本位于源文件的第一行。其他文本可以出现在此文本之前或之后。
以这种方式标记用户文件可以防止对这些文件进行后处理,使它们与生成的源文件缩进。自动缩进出现在以前的版本中,以构建名称具有该模式的文件夹文件模型
_ * . c / . cpp
(*
是文本)。缩进是无害的,但可能会导致源代码控制软件检测到的差异,从而可能触发不必要的更新。
构建对s -金宝app函数的支持
用户编写的S-Function块提供了将外部代码合并到Simulink的强大方法金宝app®开发环境。在大多数情况下,您使用s函数来集成现有的外部代码和生成的代码。有几种方法可以写s函数:
S-functions还提供了在构建过程中包含遗留代码和自定义代码文件的构建信息的最灵活和最强大的方式。
在构建过程中添加s函数有不同的方法。
隐式构建支持金宝app
在使用s -函数构建模型时,构建过程将向生成的makefile添加规则、包含路径和源文件名。源文件(.h
,.c
,. cpp
)的S-function文件必须与S-function mexo文件在同一个文件夹中。无论是使用工具链方法还是模板生成文件方法进行构建,构建过程都会通过工具链或模板生成文件传播此信息。
如果文件
与S-function mexo文件存在于同一文件夹中(例如,sfcnname
.h
),该文件夹被添加到包含路径。sfcnname
.mexext
如果文件
或sfcnname
.c
存在于与S-function MEX-file相同的文件夹中,构建过程添加了一个makefile规则,用于从该文件夹编译文件。sfcnname
. cpp当s函数没有与TLC文件内联时,构建过程必须编译s函数源文件。要确定要添加到要编译的文件列表中的源文件的名称,构建过程将搜索
在MATLAB路径上。如果找到源文件,构建过程将源文件名添加到makefile中。如果sfcnname
. cpp
在路径上没有找到,构建过程中添加的文件名sfcnname
. cpp
到makefile,无论它是否在MATLAB路径上。sfcnname
.c请注意
为了让Simul金宝appink引擎找到用于模拟和代码生成的mexo文件,它必须存在于MATLAB路径中或存在于我们当前的MATLAB工作文件夹中。
为S-Function指定额外的源文件
如果s -函数具有其他源文件依赖项,则必须将其他模块的名称添加到构建过程中。指定文件名:
在功能模块字段在S-Function块参数对话框
与
SFunctionModules
方法调用中的参数set_param
函数
例如,假设你用多个模块构建s函数。
Mex sfun_main.c sfun_module1.c sfun_module2.c
然后,您可以通过执行以下操作之一将模块添加到构建过程中:
在s函数块对话框中指定
sfun_main
,sfun_module1
,sfun_module2
在功能模块字段。在MATLAB命令提示符中,输入:
set_param (sfun_block, ' SFunctionModules”、“sfun_module1 sfun_module2”)
或者,您可以定义一个变量来表示参数值。
set_param(sfun_block,' sfun_module1 ', modules)
的功能模块场和SFunctionModules
参数不支持完整的源文件路径规范。金宝app要使用该参数,代码生成器在执行makefile时必须找到其他源文件。要让代码生成器定位其他文件,请将它们放置在与S-function mex文件相同的文件夹中。中描述的隐式构建支持金宝app隐式构建支持金宝app.
当您准备生成代码时,强制代码生成器重新构建顶部模型,如中所述顶层模型代码的控制再生.
对于更复杂的s函数文件依赖项,例如在其他位置指定源文件或指定库或目标文件,请使用rtwmakecfg.m
API,如使用rtwmakecfg。m API自定义生成的Makefiles.
使用TLC库函数
如果通过编写TLC文件来内联s函数,则可以使用TLC库函数将源文件名添加到构建过程中LibAddToModelSources
.详细信息请参见LibAddSourceFileCustomSection(文件,builtInSection, newSection).
请注意
该函数不支持完整的源文件路径规范。金宝app该函数假定代码生成器在执行makefile时可以找到其他源文件。
另一个有用的TLC库函数是LibAddToCommonIncludes
.在a中使用此函数# include
语句中包含s函数头文件模型
.h
头文件。详细信息请参见LibAddToCommonIncludes (incFileName).
对于更复杂的s函数文件依赖项,例如在其他位置指定源文件或指定库或目标文件,请使用rtwmakecfg.m
API,如使用rtwmakecfg。m API自定义生成的Makefiles.
预编译s函数库
您可以使用MATLAB语言函数为模型预编译新的或更新的s函数库(MEX-files)rtw_precompile_libs
.使用指定的模型和库构建规范,此函数构建库并将库放置在预编译的库文件夹中。
通过预编译s函数库,可以优化系统构建。一旦预先编译的库存在,构建过程可以从后续构建中省略库编译。对于使用大量库的模型,构建处理所节省的时间是非常重要的。
使用rtw_precompile_libs
:
根据您的系统平台设置库文件后缀,包括文件类型扩展名。
考虑确定平台的类型,然后使用
TargetLibSuffix
参数设置相应的库后缀。例如,当为GRT目标应用后缀时,可以将后缀设置为_std.a
UNIX系统®平台和_vcx64.lib
Windows操作系统®平台。如果isunix suffix = '_std.a';Else suffix = '_vcx64.lib';end set_param(my_model,'TargetLibSuffix', suffix);
有许多因素会影响预编译的库后缀和扩展名。下表提供了系统目标文件、编译器工具链和其他影响后缀和扩展名选择的选项的典型选择示例。类中的模板make文件,以获得更多信息
matlab / rtw grt / c /
文件夹或matlab rtw / c /导
文件夹中。TMF文件 编译器_TOOL_CHAIN值 预编译器库(PRECOMP_LIBRARIES) 库后缀s函数(EXPAND _LIBRARY _NAME Value) 库后缀Integer- Only Code (EXPAND _LIBRARY _NAME Value) 库后缀为速度优化(EXPAND _LIBRARY _NAME Value) 库扩展(EXPAND _LIBRARY _NAME Value) ert_lcc64.tmf 低成本航空 _rtwsfcn_lcc _int_ert_lcc _ert_lcc . lib ert_vcx64.tmf vcx64 _rtwsfcn_vcx64 _int_ert_vcx64 _ert_vcx64 . lib ert_unix.tmf unix _rtwsfcn _int_ert _ert .a grt_lcc64.tmf 低成本航空 N/A N/A _lcc . lib grt_vcx64.tmf vcx64 N/A N/A _vcx64 . lib grt_unix.tmf unix N/A N/A _std .a 设置预编译的库文件夹。
设置
TargetPreCompLibLocation
参数,如在指定预编译库的位置.设置
makeInfo.precompile
场在一个rtwmakecfg.m
函数文件。(有关更多信息,请参见使用rtwmakecfg。m API自定义生成的Makefiles.)
如果你设置
TargetPreCompLibLocation
而且makeInfo.precompile
,设置为TargetPreCompLibLocation
优先。下面的命令为模型设置预编译的库文件夹
my_model
到文件夹自由
在当前工作文件夹下。set_param (my_model TargetPreCompLibLocation, fullfile (pwd, '自由'));
请注意
如果同时为预编译库文件设置目标文件夹和目标库文件后缀,构建过程将在处理构建时检测是否缺少任何预编译库文件。
定义一个构建规范。
设置定义构建规范的结构。下表描述了可以在结构中定义的字段。这些字段都是可选的,除了
rtwmakecfgDirs
.场 描述 包含文件夹名称的字符向量单元格数组
rtwmakecfg
预编译库的文件。函数使用的名字
而且位置
的元素makeInfo.library
,由rtwmakecfg
,以指定预编译库的名称和位置。如果你设置TargetPreCompLibLocation
参数来指定库文件夹,则该设置将覆盖makeInfo.library.Location
设置。注意:属性指定的模型必须包含使用预编译库的块
rtwmakecfg
文件,因为只有在构建过程使用库时,TMF-to-makefile转换才会生成库规则。一个字符向量,它指定要附加到每个库名称后的后缀,包括文件类型扩展名(例如, .a
或_vc.lib
).字符向量必须包含句号(.)。字段设置后缀TargetLibSuffix
参数。如果使用这两种机制指定后缀,则TargetLibSuffix
设置将覆盖此字段的设置。布尔标志。当设置为true时,该标志表示库将被优化,以便仅从整数代码编译。此字段仅适用于ERT目标。 属性中指定要包含的选项的字符向量 rtwMake
命令行。控件未指定要构建的库的单元格结构数组
rtwmakecfg
函数。每个结构必须定义两个字段,这两个字段是字符数组:库名
-不带后缀的库名libLoc
-预编译库的位置
目标makefile (TMF)可以指定其他库以及如何构建这些库。使用此字段预编译这些库。
下面的命令设置构建规范
build_spec
,表示需要编译的文件在文件夹中src
在当前工作文件夹下。Build_spec = [];build_spec。rtwmakecfgDirs = {fullfile(pwd,'src')};
发出呼叫
rtw_precompile_libs
.调用必须指定要为其构建预编译库的模型和构建规范。例如:
rtw_precompile_libs (my_model build_spec);
相关的话题
- 调用可重用的外部算法代码进行仿真和代码生成(嵌入式编码)
- 在生成的代码中放置外部C/ c++代码(嵌入式编码)
- 调用外部设备驱动程序(嵌入式编码)
- 将应用程序部署到目标硬件(嵌入式编码)
- 将生成的组件软件部署到应用程序目标平台(嵌入式编码)