slbuild
为模型编译独立可执行文件或模型引用目标
语法
说明
slbuild( 根据一个或多个名称-值参量指定的模型,编译一个独立的 Simulink Coder 二进制可执行文件。model,Name,Value)
使用您的模型的当前配置参数设置,生成子系统代码并编译一个 Simulink Coder 二进制可执行文件。如果所选系统目标文件创建了一个 S-Function 模块,该函数将返回自动生成的 S-Function 包装器的非空模块句柄。在运行命令之前,必须打开或加载父模型。blockHandle = slbuild(subsystem)
从子系统生成代码,其中包括可以导出为外部应用程序代码的函数调用。此命令需要 Embedded Coder®。如果创建模块配置参数设置为 SIL,该函数在 SIL 模式下返回一个 Model 模块的句柄。然后,您可以使用 Model 模块进行数值等效性测试。blockHandle = slbuild(subsystem,'Mode','ExportFunctionCalls')
生成子系统代码,并根据一个或多个名称-值参量的指定编译一个 Simulink Coder 二进制可执行文件。blockHandle = slbuild(subsystem,Name,Value)
示例
为模型 CounterModel 生成 C 代码。
openExample('CounterModel') slbuild('CounterModel') % Same operation as ... % slbuild('CounterModel','StandaloneCoderTarget')
对于一般实时 (GRT) 目标,代码生成器生成以下代码文件并将它们放在文件夹 CounterModel_grt_rtw 和 slprj/grt/_sharedutils 中。
| 模型文件 | 共享文件 | 接口文件 | 其他文件 |
|---|---|---|---|
|
|
| 无 |
如果应用以下模型配置参数设置,代码生成器将生成其他结果。
| 参数设置 | 结果 |
|---|---|
| 代码生成 > 仅生成代码窗格处于清除状态 | 可执行文件 CounterModel.exe |
| 代码生成 > 报告 > 创建代码生成报告处于选中状态 | 报告随即显示,为您提供有关下列各项的信息和链接:生成的代码文件,子系统和代码接口报告,入口函数、输入端口、输出端口、接口参数和数据存储 |
此示例说明如何使用 slbuild 为两个模型 CounterModel 和 ParallelBuildA1 生成可执行代码。ParallelBuildA1 是引用模型的顶层模型,并配置为并行构建所引用的模型。
打开模型。
openExample("simulinkcoder/RegisterAndUseToolchainToBuildExecutableExample", ... supportingfile="CounterModel.slx") openExample("simulinkcoder/MonitorBuildProcessForModelHierarchyExample", ... supportingfile="ParallelBuildA1.slx")
编译模型。
slbuild({'CounterModel', 'ParallelBuildA1'})### Starting build procedure for: CounterModel ### Successful completion of build procedure for: CounterModel Build Summary Top model targets: Model Build Reason Status Build Duration =============================================================================================================== CounterModel Information cache folder or artifacts were missing. Code generated and compiled. 0h 0m 37.136s 1 of 1 models built (0 models already up to date) Build duration: 0h 0m 40.889s ### Searching for referenced models in model 'ParallelBuildA1'. ### Found 3 model reference targets to update. Starting parallel pool (parpool) using the 'Processes' profile ... Connected to parallel pool with 4 workers. ### Initializing workers for parallel model reference build. ### Parallel worker initialization complete. ### Starting parallel model reference code generation build. ### Successfully updated the model reference code generation target for: ParallelBuildB1 ### Successfully updated the model reference code generation target for: ParallelBuildB2 ### Successfully updated the model reference code generation target for: ParallelBuildB3 ### Starting build procedure for: ParallelBuildA1 ### Successful completion of build procedure for: ParallelBuildA1 Build Summary Model reference code generation targets: Model Build Reason Status Build Duration ======================================================================================================== ParallelBuildB1 Target (ParallelBuildB1.c) did not exist. Code generated and compiled. 0h 0m 53.995s ParallelBuildB2 Target (ParallelBuildB2.c) did not exist. Code generated and compiled. 0h 0m 53.985s ParallelBuildB3 Target (ParallelBuildB3.c) did not exist. Code generated and compiled. 0h 0m 53.985s Top model targets: Model Build Reason Status Build Duration ================================================================================================================== ParallelBuildA1 Information cache folder or artifacts were missing. Code generated and compiled. 0h 0m 18.998s 4 of 4 models built (0 models already up to date) Build duration: 0h 3m 15.417s
对于每个模型,编译过程都会显示编译摘要。
在当前文件夹中,编译过程创建独立的可执行文件 CounterModel.exe 和 ParallelBuildA1.exe。
为模型 TopModelCode 生成代码和编译可执行文件,它引用模型 ReferenceModelCode 而不管模型校验和与参数设置如何。
openExample('simulinkcoder/FilePackagingModelsCodeAndDataExample',... 'supportingFile','TopModelCode'); slbuild('TopModelCode','StandaloneCoderTarget',... 'ForceTopModelBuild',true)
为模型 CounterModel 中的子系统 Amplifier 生成 C 代码。
openExample('CounterModel') slbuild('CounterModel/Amplifier')
代码生成器在 Amplifier_grt_rtw 和 slprj/grt/_sharedutils 文件夹中生成代码文件。
在您的当前工作文件夹中,编译过程会创建一个可执行文件 (Amplifier.exe)。
要将函数调用导出为外部应用程序代码,请从函数调用子系统编译可执行文件。
openExample('SimulinkFunctions') set_param('SimulinkFunctions','GenCodeOnly','off'); slbuild('SimulinkFunctions/util','Mode','ExportFunctionCalls')
可执行文件 util.exe 出现在您的工作文件夹中。
从一个函数调用子系统创建一个 Model 模块,您可以用它来测试从模型中生成的代码。
在模型 SimulinkFunctions 中打开子系统 util。
将代码生成 > 验证 > 高级参数 > 创建模块配置参数设置为 SIL。
创建 Model 模块。
openExample('SimulinkFunctions'); set_param('SimulinkFunctions','GenCodeOnly','off'); mysilblockhandle = slbuild('SimulinkFunctions/util',... 'Mode','ExportFunctionCalls')
代码生成器会在一个临时模型中生成 Model 模块。Model 模块的配置如下:
模型名称设置为包含原始子系统内容的新模型的名称。
仿真模式设置为软件在环 (SIL)。
您可以将模块添加到提供测试向量或激励输入的环境或测试框架模型中。然后,您可以运行执行 SIL 测试的仿真,并验证 Model 模块产生的结果与原始子系统相同。
输入参数
如果将模型名称指定为句柄或字符向量,则编译过程会创建一个独立的可执行文件或模型引用目标。
如果通过句柄或字符向量的元胞数组指定多个模型,编译过程会对元胞数组中的每个模型应用 buildSpec。
示例: gcs
要从中生成代码或编译可执行文件的子系统的名称,指定为表示子系统名称或完整模块路径的句柄或字符向量。
您可以通过由句柄或字符向量组成的元胞数组来指定多个子系统
示例: 'SimulinkFunctions/util'
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' 值 | 等效的重新编译选项 | 重新编译操作 |
|---|---|---|
| 始终 | 无条件重新编译该模型。 |
| 如果检测到变化 | 如果构建过程检测到任何更改,将重新编译模型。 |
| 如果检测到已知依赖关系的变化 | 如果构建过程检测到此模型的已知依赖关系中发生任何更改,将重新编译模型。 |
有关不同重新编译选项的详细信息,请参阅重新编译。
示例: 'UpdateThisModelReferenceTarget','Force'
依赖关系
要使用此选项,请将 buildSpec 设置为 'ModelReferenceSimTarget' 或 'ModelReferenceCoderTarget'。
数据类型: char | string
如果顶层模型使用 ERT 或 GRT 系统目标文件,请使用此选项指定编译过程的输出类型。
| 'BuildOutputType' 值 | 编译操作 |
|---|---|
| 在代码生成文件夹中,从顶层模型创建一个 Simulink Coder 二进制文件。编译过程的输出类型取决于当前配置参数设置。例如:
|
| 在代码生成文件夹中,从顶层模型生成的代码创建一个独立的 Simulink Coder 二进制可执行文件。例如,myModel.exe。 |
| 在编译文件夹中,从顶层模型生成的代码创建一个静态库。例如, |
| 在编译文件夹中,从顶层模型生成的代码创建一个共享库。例如, |
有关代码生成和编译文件夹的信息,请参阅管理编译过程文件夹 (Simulink Coder)。
示例: 'BuildOutputType' ,'StaticLibrary'
依赖关系
要使用此选项,请将 buildSpec 设置为 'StandaloneCoderTarget'。
数据类型: char | string
强制编译模型层次结构的顶层模型的选项,指定为由 'ForceTopModelBuild' 和 true 或 false 组成的以逗号分隔的对组。
将值设置为 true 会指示代码生成器生成代码并为模型层次结构的顶层模型编译可执行文件,而不考虑模型校验和与参数设置。
示例: 'ForceTopModelBuild',true
依赖关系
要使用此选项,请将 buildSpec 设置为 'StandaloneCoderTarget'。
数据类型: logical
如果未指定值,代码生成窗格中的仅生成代码 (GenCodeOnly) 选项将控制编译过程行为。
如果指定值,该参量将覆盖代码生成窗格中的仅生成代码 (GenCodeOnly) 选项:
true- 仅生成代码。false- 生成代码并编译可执行文件。
依赖关系
要使用此选项,请将 buildSpec 设置为 'StandaloneCoderTarget' 或 'ModelReferenceCoderTarget'。
'ExportFunctionCalls'- 如果您有 Embedded Coder,将从其中包含可导出为外部应用程序代码的函数调用的subsystem生成代码。'Normal'- 不导出函数调用。
为指定的子系统命名导出的函数。
示例: slbuild(subsystem,'Mode','ExportFunctionCalls','ExportFunctionFileName', fcnname)
为指定的子系统命名导出的初始化函数。
示例: rtwbuild(subsystem,'Mode','ExportFunctionCalls','ExportFunctionInitializeFunctionName', fcnname)
显示编译信息的选项,指定为由 'OpenBuildStatusAutomatically' 和 true 或 false 组成的以逗号分隔的对组。
要在“编译状态”窗口中显示编译信息,请指定 true。默认值为 false。有关使用状态窗口的详细信息,请参阅Monitor Parallel Building of Referenced Models (Simulink Coder)。
“编译状态”窗口支持引用模型层次结构的并行编译。不要使用“编译状态”窗口进行串行编译。
依赖关系
要使用此选项,请将 buildSpec 设置为 'StandaloneCoderTarget'。
数据类型: logical
指定是否生成经过混淆处理的 C 代码:
true- 生成经过混淆处理的 C 代码,您可以将其与第三方共享,从而降低涉及知识产权问题的可能性。false- 不对生成的 C 代码进行混淆处理。
输出参量
自动生成的 S-Function 包装器模块或 Model 模块的模块句柄。
扩展功能
要并行编译引用模型,请在顶层模型中,选中配置参数复选框启用并行模型引用编译。有关详细信息,请参阅Reduce Build Time for Referenced Models by Using Parallel Builds (Simulink Coder)。
在 Parallel Computing Toolbox™ 命令(例如 parfor 或 spmd 循环)中,不要调用 rtwbuild、rtwrebuild 或 slbuild 命令来编译为并行编译配置的模型。
版本历史记录
在 R2006a 之前推出当您使用 IncludeModelReferenceSimulationTargets 参量时,slbuild 函数会发出警告。该警告指示该参量不起作用,将在以后的版本中删除。
默认情况下,slbuild 函数不再生成模型引用仿真目标。通过排除模型引用仿真目标,可以加快模型层次结构的代码生成。
当您为 buildSpec 参量指定 'ModelReferenceCoderTarget' 时,slbuild 不再编译模型引用仿真目标。仅编译模型引用 Simulink Coder 目标。
现在,buildSpec 参量值 'ModelReferenceCoderTarget' 和 'ModelReferenceCoderTargetOnly' 具有相同的行为。不推荐使用 'ModelReferenceCoderTargetOnly'。请改用 'ModelReferenceCoderTarget'。
目前没有删除 'ModelReferenceCoderTargetOnly' 的计划。
为了清楚起见,以下 buildSpec 参量值开始采用新名称:
'StandaloneRTWTarget'- 改用'StandaloneCoderTarget'。'ModelReferenceRTWTarget'- 改用'ModelReferenceCoderTarget'。'ModelReferenceRTWTargetOnly'- 改用'ModelReferenceCoderTargetOnly'。
目前没有删除原有 buildSpec 参量值的计划。
另请参阅
codebuild (Simulink Coder) | rtwrebuild (Simulink Coder)
主题
- 管理引用模型的仿真目标
- What Is Acceleration?
- 执行加速
- 共享 Simulink 缓存文件以加快仿真速度
- Build and Run a Program (Simulink Coder)
- 编译从 Simulink 模型生成的代码的方法 (Simulink Coder)
- Reduce Build Time for Referenced Models by Using Parallel Builds (Simulink Coder)
- Control Regeneration of Top Model Code (Simulink Coder)
- 生成要导出到外部代码库的组件源代码 (Embedded Coder)
- 用 SIL 和 PIL 仿真测试生成的代码 (Embedded Coder)
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
选择网站
选择网站以获取翻译的可用内容,以及查看当地活动和优惠。根据您的位置,我们建议您选择:。
您也可以从以下列表中选择网站:
如何获得最佳网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他 MathWorks 国家/地区网站并未针对您所在位置的访问进行优化。
美洲
- América Latina (Español)
- Canada (English)
- United States (English)
欧洲
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)