比较各产品的系统目标文件支持
在您选择系统目标文件(例如 grt.tlc
)时,所做选择将定义运行时环境和代码生成功能。确定符合您的代码生成工作流目标的系统目标文件功能。
代码生成器使用系统目标文件来生成用于在特定目标硬件或特定操作系统上执行的代码。系统目标文件调用其他运行时环境特定的文件。有关为目标硬件配置模型代码生成参数的详细信息,请参阅配置运行时环境选项。
不同类型的系统目标文件支持选择相应的生成代码的功能。在系统目标文件中,CodeFormat
TLC 变量的值和对应的 rtwgensettings.DerivedFrom
字段值标识系统目标文件类型和生成代码的功能。这些选择会在代码生成过程中的几个点应用代码生成控制决策。您的选择包括模型编译是否以及如何生成:
特定数据结构体(例如,
SimStruct
或rtModel
)静态或动态内存分配代码
为生成的模型函数调用接口
对于自定义系统目标文件开发,CodeFormat
值在不同的代码生成目标中会有所不同:
如果系统目标文件不包含
CodeFormat
TLC 变量的值,则对于一般实时目标 (GRT),默认值为RealTime
。对应的rtwgensettings.DerivedFrom
字段值为grt.tlc
(默认值)。如果您正在开发自定义系统目标文件并且有 Embedded Coder 软件,则对于嵌入式实时目标 (ERT),请考虑将
CodeFormat
TLC 变量值设置为Embedded-C
。对应的rtwgensettings.DerivedFrom
字段值为ert.tlc
。与 GRT 系统目标文件相比,ERT 系统目标文件支持更多的生成代码功能。
此示例说明如何在 ert.tlc
中设置 CodeFormat
TLC 变量的值以及对应的 rtwgensettings.DerivedFrom
字段值。
%assign CodeFormat = "Embedded-C" /% BEGIN_RTW_OPTIONS rtwgensettings.DerivedFrom = 'ert.tlc'; END_RTW_OPTIONS %/
注释
使用 CodeFormat
TLC 变量的值及其对应的 rtwgensettings.DerivedFrom
字段值来为模型生成代码。如果未显式选择值,将应用默认值。对于 rtwgensettings.DerivedFrom
字段,请使用 'ert.tlc'
或 'grt.tlc'
。有关详细信息,请参阅系统目标文件的结构。
有关针对 GRT 和 ERT 系统目标文件默认生成的优化调用接口的说明,请参阅为模型入口函数配置生成的 C 函数接口。
使用 GRT 和 ERT 系统目标文件的代码生成采用实时模型数据结构体 (rtModel
)。此结构体封装模型特定信息的形式比仿真结构体 SimStruct
的封装形式紧凑得多。所生成代码的许多高效功能取决于 rtModel
而非 SimStruct
的生成,包括:
整数绝对时间和已用时间计时服务
异步任务的独立计时器
为信号、状态和参数监测生成改进的 C API 代码
删减数据结构体以最小化其大小(仅限 ERT 派生的系统目标文件)
有关 rtModel
数据结构体的说明,请参阅Real-Time Model Data Structure。
比较产品系统目标文件
您可以使用系统目标文件浏览器从一系列系统目标文件中进行选择。通过此选择,您可以使用配置选项进行试验并保存具有不同配置的模型。
除非您的系统上有所需的软件,否则不能为非 GRT 系统目标文件编译或生成代码。例如,对于 ERT 系统目标文件,需要 Embedded Coder®;对于 SLDRT 系统目标文件,需要 Simulink® Desktop Real-Time™,等等。
为模型选择系统目标文件时,会选择工具链方法或模板联编文件方法进行编译过程控制。有关这些方法的详细信息,请参阅Approaches for Building Code Generated from Simulink Models。
可从系统目标文件浏览器获得的系统目标文件
支持的系统目标文件 | 文件名 | 参考 |
---|---|---|
Embedded Coder(适用于 PC 或 UNIX® 平台) |
| |
为 Embedded Coder 创建 Visual C++® 解决方案文件 |
(需要 CMake 工具链或 | |
适用于 AUTOSAR 的 Embedded Coder |
| |
一般实时(适用于 PC 或 UNIX 平台) |
| |
创建 Visual C++ 解决方案文件 |
(需要 CMake 工具链或 | |
快速仿真(默认适用于 PC 或 UNIX 平台) |
| Accelerate, Refine, and Test Hybrid Dynamic System on Host Computer by Using RSim System Target File |
适用于 LCC 编译器的快速仿真 |
| Accelerate, Refine, and Test Hybrid Dynamic System on Host Computer by Using RSim System Target File |
适用于 UNIX 平台的快速仿真 |
| Accelerate, Refine, and Test Hybrid Dynamic System on Host Computer by Using RSim System Target File |
适用于 Visual C++ 编译器的快速仿真 |
| Accelerate, Refine, and Test Hybrid Dynamic System on Host Computer by Using RSim System Target File |
适用于 PC 或 UNIX 平台的 S-Function |
| |
适用于 LCC 的 S-Function |
| |
适用于 UNIX 平台的 S-Function |
| |
适用于 Visual C++ 编译器的 S-Function |
| |
ASAM-ASAP2 数据定义 |
(在以后的版本中将会删除。有关如何生成 A2L 文件的信息,请参阅生成 ASAP2 和 CDF 标定文件) | |
Simulink Desktop Real-Time |
| Set Run in Kernel Mode Code Generation Parameters (Simulink Desktop Real-Time) |
Simulink Real-Time™ |
| Simulink Real-Time Options Pane (Simulink Real-Time) |
注意
要创建和编译具有调试配置的 Visual C++ 解决方案 (.sln
) 文件,请使用以下选项之一:
在 Toolchain 字段中,指定 CMake 工具链,例如,“
Microsoft Visual Studio Project 2019 | CMake (64 位 Windows)
” 或 “Microsoft Visual Studio Project 2017 | CMake (64 位 Windows)
”。有关 CMake 工具链的详细信息,请参阅Configure CMake Build Process。在 Template makefile 字段中,指定 “
RTW.MSVCBuild
”。
比较代码样式和 STF 支持
代码生成器生成两种样式的代码。一种代码样式适用于快速原型构建(以及使用代码生成进行仿真)。另一种样式适用于嵌入式应用程序。下表将系统目标文件映射到对应的代码样式。
系统目标文件列出的代码样式
系统目标文件 | 代码样式 | 用途 |
---|---|---|
Embedded Coder 嵌入式实时 (ERT) | 嵌入式 | 以此为起点开发 C/C++ 生成代码的嵌入式应用程序。 |
Simulink Coder™ 一般实时 (GRT) | 快速原型 | 以此为起点,创建不使用实时操作系统任务原语的快速原型目标硬件,以及在台式计算机上验证生成的 C/C++ 代码。 |
快速仿真 (RSim) | 快速原型 | 在台式计算机和高速或批量仿真工具上提供非实时仿真。 |
S-Function | 快速原型 | 创建 C MEX S-Function,用于在另一个 Simulink 模型中进行仿真。 |
Simulink Desktop Real-Time | 快速原型 | 当台式计算机在后台运行 Microsoft® Windows® 时,在中断级别实时运行模型。 |
Simulink Real-Time | 快速原型 | 在运行 Simulink Real-Time 内核的台式计算机上实时运行模型。 |
第三方供应商提供其他系统目标文件以支持其产品的代码生成。有关第三方产品的详细信息,请参阅供应商网站或 MathWorks Connections 计划网页:https://www.mathworks.com/products/connections
。
按产品比较生成的代码的功能
实时系统目标文件(例如 GRT)的代码生成过程提供许多嵌入式代码优化。选择基于 ERT 的系统目标文件提供比 GRT 更广泛的功能。系统目标文件选择确定代码生成产品的可用功能。当您选择与开发过程匹配的代码生成目标时,请使用下表来比较随 Simulink Coder 提供的代码生成功能和随 Embedded Coder 提供的功能。
比较 Simulink Coder 与 Embedded Coder 的代码生成功能
功能 | Simulink Coder | Embedded Coder |
---|---|---|
|
|
|
自定义存储类 (CSC) | 代码生成会忽略 CSC。为对象分配一个 CSC(默认为 | 支持使用 CSC 生成代码 |
HTML 代码生成报告 | 基本 HTML 代码生成报告 | 包含更多详细信息和模型超链接的增强报告 |
符号格式设置 | 根据硬编码默认值生成符号(用于信号、参数等) | 对生成的符号施加详细控制 |
用户定义的针对生成符号的最大标识符长度 | 支持 | 支持 |
生成终止函数 | 生成 | 可选择是否隐藏终止函数 |
组合的输出/更新函数 | 生成单独的输出/更新函数 | 可选择是否生成组合的输出/更新函数 |
优化的数据初始化 | 不适用 | 可选择是否为零值内存、I/O 端口等生成不必要的初始化代码 |
注释生成 | 可选择包含或禁止注释生成 | 可选择是否在注释中包含 Simulink 模块描述、Stateflow® 对象描述和 Simulink 数据对象描述 |
模块打包功能 (MPF) | 不支持 | 广泛的代码自定义功能。请参阅Manage Replacement of Simulink Data Types in Generated Code和 MPT Data Object Properties。 |
针对系统目标文件优化的数据类型头文件 | 需要完整的 | 生成优化的 |
用户定义的类型 | 用户定义的类型默认为代码生成中的基类型 | 代码生成支持用户定义的数据类型别名 |
速率分组 | 不支持 | 支持 |
主程序模块自动生成 | 不支持。提供静态主程序模块。 | 支持自动和可自定义的主程序模块生成(也可使用静态主程序) |
可重用(多实例)代码生成 | 可选择是否使用动态内存分配生成可重用代码 | 可选择是否使用静态或动态内存分配生成可重用代码 |
软件约束选项 | 支持浮点数、复数和非有限数 | 可选择启用或禁用浮点数、复数和非有限数支持 |
应用程序寿命 | 默认为 | 用户指定。确定整数计时器的最有效字长 |
ANSI® -C/C++ 代码生成 | 支持 | 支持 |
ISO® -C/C++ 代码生成 | 支持 | 支持 |
GNU® -C/C++ 代码生成 | 支持 | 支持 |
生成标量内联参数作为 | 不支持 | 支持 |
MAT 文件变量名称修饰符 | 支持 | 支持 |
数据交换:C API、ASAP2、外部模式 | 支持 | 支持 |
按 STF 比较生成的代码的功能
代码生成器支持不同系统目标文件的生成代码的一系列功能。在每个系统目标文件中,CodeFormat
TLC 变量的值标识功能集。
下表总结了不同系统目标文件对应用程序的支持。
应用场景 | 系统目标文件 (STF) |
---|---|
固定或变步长加速 | RSIM、S-Function、模型引用 |
定步长实时部署 | GRT、ERT、 Simulink Real-Time、Simulink Desktop Real-Time... |
下表总结了对每个系统目标文件选项可用的各种选项,也说明了例外情况。
为系统目标文件 (STF) 生成的代码所支持的功能
系统目标文件 (STF) | ||||||||
---|---|---|---|---|---|---|---|---|
功能 | grt.tlc (请参阅注释 1。) | ert.tlc (请参阅注释 1。) | ert_shrlib.tlc (请参阅注释 1。) | rtwsfcn.tlc (请参阅注释 1。) | rsim.tlc (请参阅注释 1。) | sldrt.tlc (请参阅注释 1。) | slrealtime.tlc (请参阅注释 1。) | 其他 (请参阅注释 1。) |
静态内存分配 | X | X |
|
| X | X | X | |
动态内存分配 | X (请参阅注释 4、5。) | X (请参阅注释 4、5。) |
| X | X |
| X |
|
连续时间 | X | X |
| X | X | X | X |
|
C/C++ MEX S-Function | X | X |
| X | X | X | X |
|
S-Function(内联) | X | X |
| X | X | X | X | X |
最小化 RAM/ROM 使用量 |
| X |
|
|
|
| X2 | X |
支持外部模式 | X | X |
|
| X | X | X |
|
快速原型 | X |
|
|
|
| X | X | X |
生产代码 |
| X |
|
|
|
| X2 | X (请参阅注释 3。) |
批量参数调整和蒙特卡罗方法 |
|
| X |
| X |
|
|
|
系统级仿真器 |
|
| X |
|
|
|
|
|
硬实时执行 | X (请参阅注释 3。) | X (请参阅注释 3。) |
|
|
| X | X | X5 |
包括非实时可执行文件 | X | X |
|
| X |
|
|
|
模型的多个实例 | X (请参阅注释 4、5。) | X (请参阅注释 4、5。) |
| X4 |
|
| X (请参阅注释 4、5。) | X (请参阅注释 4、5。) |
支持变步长求解器 |
|
|
| X | X |
|
|
|
支持 SIL/PIL | X | X |
|
|
|
|
| X |
注释
系统目标文件:
grt.tlc - 一般实时目标
ert.tlc - 嵌入式实时目标
ert_shrlib.tlc - 嵌入式实时目标共享库
rtwsfcn.tlc - S-Function
rsim.tlc - 快速仿真
sldrt.tlc - Simulink Desktop Real-Time
slrealtime.tlc - Simulink Real-Time
其他 - Simulink Coder 中的嵌入式实时功能支持其他系统目标文件
不适用于基于 GRT 的系统目标文件。仅适用于基于 ERT 的系统目标文件。
默认的 GRT 和 ERT
rt_main
文件模拟硬实时执行。当显式连接到实时时钟时,它们会硬实时执行。您可以为 Stateflow 图的多个实例或包含图的子系统的多个实例生成代码,但当该图包含导出的图形函数或 Stateflow 模型包含机器级别事件时例外。
在“配置参数”对话框中,对于代码接口打包字段,选择“
可重用函数
”。