为模型编译独立可执行文件或模型引用目标 -凯发官方首页
为模型编译独立可执行文件或模型引用目标
语法
说明
slbuild(
根据一个或多个名称-值参数指定的模型,编译一个独立的 simulink coder 二进制可执行文件。model
,name,value
)
使用您的模型的当前配置参数设置,生成子系统代码并编译一个 simulink coder 二进制可执行文件。如果所选系统目标文件创建了一个 s-function 模块,该函数将返回自动生成的 s-function 包装器的非空模块句柄。在运行命令之前,必须打开或加载父模型。blockhandle
= slbuild(subsystem
)
从子系统生成代码,其中包括可以导出为外部应用程序代码的函数调用。此命令需要 embedded coder®。如果创建模块配置参数设置为 “blockhandle
= slbuild(subsystem
,'mode','exportfunctioncalls')sil
”,该函数在 sil 模式下返回一个 model 模块的句柄。然后,您可以使用 model 模块进行数值等效性测试。
生成子系统代码,并根据一个或多个名称-值参数的指定编译一个 simulink coder 二进制可执行文件。blockhandle
= slbuild(subsystem
,name,value
)
示例
为模型生成代码并编译可执行文件。
为模型 rtwdemo_rtwintro
生成 c 代码。
slbuild('rtwdemo_rtwintro') % same operation as ... % slbuild('rtwdemo_rtwintro','standalonecodertarget')
对于一般实时 (grt) 目标,代码生成器生成以下代码文件并将它们放在文件夹 rtwdemo_rtwintro_grt_rtw
和 slprj/grt/_sharedutils
中。
模型文件 | 共享文件 | 接口文件 | 其他文件 |
---|---|---|---|
|
|
| 无 |
如果应用以下模型配置参数设置,代码生成器将生成其他结果。
参数设置 | 结果 |
---|---|
代码生成 > 仅生成代码窗格处于清除状态 | 可执行文件 rtwdemo_rtwintro.exe |
代码生成 > 报告 > 创建代码生成报告处于选中状态 | 报告随即显示,为您提供有关下列各项的信息和链接:生成的代码文件,子系统和代码接口报告,入口函数、输入端口、输出端口、接口参数和数据存储 |
编译多个顶层模型
此示例说明如何使用 slbuild
为两个模型 sldemo_mdlref_depgraph
和 rtwdemo_counter
生成可执行代码。sldemo_mdlref_depgraph
是引用模型的顶层模型。该示例还说明如何并行编译引用模型。
创建一个本地文件夹。
if exist(fullfile('.','mytempfolder'),'dir') rmdir('mytempfolder','s') end mkdir mytempfolder cd mytempfolder
将引用模型的 sldemo_mdlref_depgraph
复制到该本地文件夹。
src_dir = fullfile(matlabroot, ... 'toolbox', ... 'simulink', ... 'simdemos', ... 'simfeatures', ... 'modelreference'); copyfile(fullfile(src_dir, ... 'sldemo_mdlref_depgraph.slx'), ... '.');
启用 sldemo_mdlref_depgraph
引用的模型的并行编译。
load_system('sldemo_mdlref_depgraph') set_param('sldemo_mdlref_depgraph', ... 'enableparallelmodelreferencebuilds', 'on');
为并行编译引用模型初始化 matlab® 工作进程。
set_param('sldemo_mdlref_depgraph', ... 'parallelmodelreferencematlabworkerinit', ... 'copy base workspace');
编译模型。
slbuild({'sldemo_mdlref_depgraph', 'rtwdemo_counter'})
在 mytempfolder
中,编译过程创建独立的可执行文件 sldemo_mdlref_depgraph.exe
和 rtwdemo_counter.exe
。
对于每个模型,命令行窗口会在编译过程中显示编译摘要。
强制进行顶层模型构建
为模型 topmodelcode
生成代码和编译可执行文件,它引用模型 referencemodelcode
而不管模型校验和与参数设置如何。
openexample('simulinkcoder/filepackagingmodelscodeanddataexample',... 'supportingfile','topmodelcode'); slbuild('topmodelcode','standalonecodertarget',... 'forcetopmodelbuild',true)
为子系统生成代码并编译可执行文件。
为模型 rtwdemo_rtwintro
中的子系统 amplifier
生成 c 代码。
rtwdemo_rtwintro
slbuild('rtwdemo_rtwintro/amplifier')
代码生成器在 amplifier_grt_rtw
和 slprj/grt/_sharedutils
文件夹中生成代码文件。
在您的当前工作文件夹中,编译过程会创建一个可执行文件 (amplifier.exe
)。
编译子系统以用于将代码导出为外部应用程序
要将函数调用导出为外部应用程序代码,请从函数调用子系统编译可执行文件。
rtwdemo_exporting_functions set_param('rtwdemo_exporting_functions','gencodeonly','off'); slbuild('rtwdemo_exporting_functions/rtwdemo_subsystem','mode','exportfunctioncalls')
可执行文件 rtwdemo_subsystem.exe
出现在您的工作文件夹中。
创建用于 sil 测试的 model 模块
从一个函数调用子系统创建一个 model 模块,您可以用它来测试从模型中生成的代码。
在模型 rtwdemo_exporting_functions
中打开子系统 rtwdemo_subsystem
。
将代码生成 > 验证 > 高级参数 > 创建模块配置参数设置为 “sil
”。
创建 model 模块。
mysilblockhandle = slbuild('rtwdemo_exporting_functions/rtwdemo_subsystem',... 'mode','exportfunctioncalls')
代码生成器会在一个临时模型中生成 model 模块。model 模块的配置如下:
模型名称设置为包含原始子系统内容的新模型的名称。
仿真模式设置为“
软件在环 (sil)
”。
您可以将模块添加到提供测试向量或激励输入的环境或测试框架模型中。然后,您可以运行执行 sil 测试的仿真,并验证 model 模块产生的结果与原始子系统相同。
输入参数
model
— 指定编译过程的模型
句柄 | 字符向量 | 句柄或字符向量的元胞数组
如果将模型名称指定为句柄或字符向量,则编译过程会创建一个独立的可执行文件或模型引用目标。
如果通过句柄或字符向量的元胞数组指定多个模型,编译过程会对元胞数组中的每个模型应用 buildspec
。
示例: gcs
subsystem
— 子系统名称
句柄 | 字符向量 | 句柄或字符向量的元胞数组
要从中生成代码或编译可执行文件的子系统的名称,指定为表示子系统名称或完整模块路径的句柄或字符向量。
您可以通过由句柄或字符向量组成的元胞数组来指定多个子系统
示例: 'rtwdemo_exporting_functions/rtwdemo_subsystem'
buildspec
— 指定编译过程的代码生成操作
'standalonecodertarget'
(默认) | 'modelreferencesimtarget'
| 'modelreferencecodertarget'
| 'cleantopmodel'
buildspec
指示代码生成器对模型和编译过程执行所选的编译操作:
遵循“配置参数”对话框的模型引用窗格上 参数的设置。
仅当您编译模型引用 simulink coder 目标时,才需要 simulink coder 许可证;如果您仅编译模型引用仿真目标,则不需要许可证。
buildspec
参数必须是以下项之一。
buildspec 值 | 编译操作 |
---|---|
| 使用当前模型配置设置为指定模型编译独立的 simulink coder 二进制可执行文件。它还为引用模型编译模型引用代码生成器目标。 如果指定的模型还未加载,则在启动编译过程之前, |
| 编译模型引用仿真目标(不需要 simulink coder 许可证)。 |
| 编译模型引用 simulink coder 目标。 |
| 清理出足够的模型编译区域以便在执行下一个编译时触发顶层模型代码的重新生成。 |
示例: 'modelreferencesimtarget'
名称-值参数
将可选的参数对组指定为 name1=value1,...,namen=valuen
,其中 name
是参数名称,value
是对应的值。名称-值参数必须出现在其他参数后,但参数对组的顺序无关紧要。
在 r2021a 之前,使用逗号分隔每个名称和值,并用引号将 name
引起来。
示例: 'updatethismodelreferencetarget','force'
updatethismodelreferencetarget
— 模型引用编译的条件重新编译选项
'force'
| 'ifoutofdateorstructuralchange'
| 'ifoutofdate'
模型引用生成的条件重新编译选项,指定为由 'updatethismodelreferencetarget'
和 'force'
、'ifoutofdateorstructuralchange'
或 'ifoutofdate'
组成的以逗号分隔的对组。
此选项仅适用于指定的模型,不适用于指定模型引用的任何模型。
'updatethismodelreferencetarget' 值 | 等效的重新编译选项 | 重新编译操作 |
---|---|---|
| “始终 ” | 无条件重新编译该模型。 |
| “如果检测到任何变化 ” | 如果构建过程检测到任何更改,将重新编译模型。 |
| “如果检测到已知依存关系的任何变化 ” | 如果构建过程检测到此模型的已知依赖关系中发生任何更改,将重新编译模型。 |
有关不同重新编译选项的详细信息,请参阅。
示例: 'updatethismodelreferencetarget','force'
依存关系
要使用此选项,请将 buildspec
设置为 'modelreferencesimtarget'
或 'modelreferencecodertarget'
。
数据类型: char
| string
forcetopmodelbuild
— 强制编译模型层次结构的顶层模型
false
(默认) | true
强制编译模型层次结构的顶层模型的选项,指定为由 'forcetopmodelbuild'
和 true
或 false
组成的以逗号分隔的对组。
将值设置为 true
会指示代码生成器生成代码并为模型层次结构的顶层模型编译可执行文件,而不考虑模型校验和与参数设置。
示例: 'forcetopmodelbuild',true
依存关系
要使用此选项,请将 buildspec
设置为 'standalonecodertarget'
。
数据类型: logical
generatecodeonly
— 仅生成代码
false
| true
如果未指定值,代码生成窗格中的仅生成代码 (gencodeonly
) 选项将控制编译过程行为。
如果指定值,该参数将覆盖代码生成窗格中的仅生成代码 (gencodeonly
) 选项:
true
- 仅生成代码。false
- 生成代码并编译可执行文件。
mode
— 导出函数调用(仅用于子系统编译)
'exportfunctioncalls'
| 'normal'
'exportfunctioncalls'
- 如果您有 embedded coder,将从其中包含可导出为外部应用程序代码的函数调用的subsystem
生成代码。'normal'
- 不导出函数调用。
exportfunctionfilename
— 函数名称
字符向量
为指定的子系统命名导出的函数。
示例: slbuild(
subsystem
,'mode','exportfunctioncalls','exportfunctionfilename', fcnname
)
openbuildstatusautomatically
— 显示编译信息
false
(默认) | true
显示编译信息的选项,指定为由 'openbuildstatusautomatically'
和 true
或 false
组成的以逗号分隔的对组。
要在“编译状态”窗口中显示编译信息,请指定 true
。默认值为 false
。有关使用状态窗口的详细信息,请参阅monitor parallel building of referenced models (simulink coder)。
“编译状态”窗口支持引用模型层次结构的并行编译。不要使用“编译状态”窗口进行串行编译。
依存关系
要使用此选项,请将 buildspec
设置为 'standalonecodertarget'
。
数据类型: logical
obfuscatecode
— 生成经过混淆处理的 c 代码
false
(默认) | true
指定是否生成经过混淆处理的 c 代码:
true
- 生成经过混淆处理的 c 代码,您可以将其与第三方共享,从而降低涉及知识产权问题的可能性。false
- 不对生成的 c 代码进行混淆处理。
includemodelreferencesimulationtargets
— 编译模型引用的仿真目标
false
(默认) | true
用于编译模型引用仿真目标的选项,指定为由 'includemodelreferencesimulationtargets'
和 true
或 false
组成的以逗号分隔的对组。
依存关系
要使用此选项,请将 buildspec
设置为 'standalonecodertarget'
。
数据类型: logical
输出参数
blockhandle
— 模块句柄
句柄
自动生成的 s-function 包装器模块或 model 模块的模块句柄。
扩展功能
自动并行支持
通过使用 parallel computing toolbox™ 自动运行并行计算来加快代码执行。
要并行编译引用模型,请在顶层模型中,选中配置参数复选框启用并行模型引用编译。有关详细信息,请参阅reduce build time for referenced models by using parallel builds (simulink coder)。
在 parallel computing toolbox™ 命令(例如 parfor
或 spmd
循环)中,不要调用 rtwbuild
、rtwrebuild
或 slbuild
命令来编译为并行编译配置的模型。
版本历史记录
在 r2006a 之前推出r2020b: slbuild
在默认情况下不生成模型引用仿真目标
从 r2020b 开始,slbuild
函数在默认情况下不生成模型引用仿真目标。通过排除模型引用仿真目标,可以加快模型层次结构的代码生成。
通过将 includemodelreferencesimulationtargets
设置为 true
,可以用默认的 buildspec
值 ('standalonecodertarget'
) 生成仿真和代码生成目标。
当您为 buildspec
参数指定 'modelreferencecodertarget'
时,slbuild
不再编译模型引用仿真目标。仅编译模型引用 simulink coder 目标。
r2020b: 不推荐使用 'modelreferencecodertargetonly'
从 r2020b 开始,buildspec
参数值 'modelreferencecodertarget'
和 'modelreferencecodertargetonly'
具有相同的行为。不推荐使用 'modelreferencecodertargetonly'
。请改用 'modelreferencecodertarget'
。
目前没有删除 'modelreferencecodertargetonly'
的计划。
r2019a: 不推荐使用 'standalonertwtarget'
、'modelreferencertwtarget'
和 'modelreferencertwtargetonly'
从 r2019a 开始,为了清楚起见,以下 buildspec
参数值开始采用新名称:
'standalonertwtarget'
- 改用'standalonecodertarget'
。'modelreferencertwtarget'
- 改用'modelreferencecodertarget'
。'modelreferencertwtargetonly'
- 改用'modelreferencecodertargetonly'
。
目前没有删除原有 buildspec
参数值的计划。
另请参阅
(simulink coder) | (simulink coder)
主题
- (simulink coder)
- (simulink coder)
- (simulink coder)
- (embedded coder)
- (embedded coder)
matlab 命令
您点击的链接对应于以下 matlab 命令:
请在 matlab 命令行窗口中直接输入以执行命令。web 浏览器不支持 matlab 命令。
you can also select a web site from the following list:
how to get best site performance
select the china site (in chinese or english) for best site performance. other mathworks country sites are not optimized for visits from your location.