从 Stateflow 模块生成 C 或 C++ 代码
要基于包含 Stateflow® 图的 Simulink® 模型生成 C 或 C++ 代码,您必须使用 Simulink Coder™。除了 Simulink Coder,您还可以使用 Embedded Coder® 进一步增强生成的代码。Embedded Coder 增强功能使您的代码更易读、更紧凑、执行速度更快。
当您为目标生成代码时,Stateflow 解析器会根据支持的图表示法和动作语言语法计算每个 Stateflow 状态机中的图形对象和非图形对象及数据。有关详细信息,请参阅检测仿真期间常见的建模错误。
使用 Simulink Coder 生成代码
Simulink Coder 允许您基于包含 Stateflow 图的模型生成 C 和 C++ 代码。然后,您可以将生成的代码用于实时和非实时应用程序,包括:
仿真加速
快速原型
硬件在环 (HIL) 测试
使用 Simulink Coder 还允许您访问经典加速和快速加速模式。加速模式的工作原理是先生成目标代码,然后再用代码来执行任务。有关这些模式的详细信息,请参阅加速模式的工作原理 (Simulink)。
HIL 测试允许您测试控制器设计并确定物理系统(被控对象)模型是否有效。有关 HIL 测试的详细信息,请参阅硬件在环仿真基础知识 (Simscape)。
有关详细信息,请参阅使用 Simulink Coder 生成代码 (Simulink Coder)。
使用 Embedded Coder 生成代码
通过添加 Embedded Coder,您可以生成更紧凑、更易于阅读、运行速度更快的 C 或 C++ 代码。Embedded Coder 还允许对生成的函数、文件和数据进行控制,进而扩展了 SimulinkCoder 的功能。此外,Embedded Coder 能够轻松集成原有代码、数据类型和标定参数。Embedded Coder 支持以下几种软件标准:
AUTOSAR
MISRA C
ASAP2
Embedded Coder 还为特定硬件提供具有高级优化和设备驱动程序的支持包。
有关详细信息,请参阅使用 Embedded Coder 生成代码 (Embedded Coder)。
对 Stateflow 对象的生成代码进行优化的设计提示
明确图形函数的内联选项
当您在 Stateflow 图中使用图形函数时,请为属性函数内联选项选择内联或函数。否则,为图形函数生成的代码可能不会按预期显示。有关详细信息,请参阅指定图形函数的属性。
避免在 Stateflow 图中使用多个边沿触发事件
如果使用多个触发器,将生成多个代码语句来处理上升沿或下降沿检测。如果需要多个触发器,请改用函数调用事件。有关详细信息,请参阅通过发送输入事件激活 Stateflow 图。
将图的输入信号合并为一个总线对象
使用总线对象时,您可以减少生成函数参数列表中的参数个数。本规范也适用于图的输出信号。有关详细信息,请参阅Define Stateflow Structures。
使用离散采样时间
若离散图不在触发子系统或使能子系统内,则生成代码时使用整数计数器来跟踪时间,而不是使用 Simulink 提供的时间。生成的代码使用较少的内存,且代码能够用在软件在环 (SIL) 和处理器在环 (PIL) 仿真模式中。
为快速原型和生产部署生成代码
下表根据您的目标列出了代码生成的相关信息。
目标 | Simulink Coder 文档 | Embedded Coder 文档 |
---|---|---|
生成 C/C++ 源代码 | 源代码生成 (Simulink Coder) | 源代码生成 (Embedded Coder) |
生成 C++ 源代码和编译可执行文件 | 生成代码编译 (Simulink Coder) | 生成代码编译 (Embedded Coder) |
集成外部代码 | 外部代码导入 (Simulink Coder) | 外部代码导入 (Embedded Coder) |
仅包含针对库图的外部代码(库图位于可移植、自包含的库中,可在多个模型中使用) | 为库图集成外部代码 (Simulink Coder) | 为库图集成外部代码 (Embedded Coder) |
优化生成的代码 | 代码效率 (Simulink Coder) | 代码效率 (Embedded Coder) |
生成代码中 Stateflow 对象的可追溯性
可追溯性注释可用于:
验证生成的代码。您可以标识与某行代码对应的 Stateflow 对象,并从您已查看或未查看的不同对象追踪代码。
在为大型模型生成的代码中包含注释。您可以在生成的代码中标识对象,避免手动输入注释或说明。
要启用可追溯性注释,您必须拥有 Embedded Coder 或 HDL Coder™ 软件。对于 C/C++ 代码生成,注释仅出现在基于嵌入式实时 (ert
) 的目标的生成代码中。有关详细信息,请参阅Trace Stateflow Elements in Generated Code (Embedded Coder)和Navigate Between Simulink Model and HDL Code by Using Traceability (HDL Coder)。
相关主题
- Generate Code from Atomic Subcharts
- Select Array Layout for Matrices in Generated Code
- 使用 Simulink Coder 生成代码 (Simulink Coder)
- 使用 Embedded Coder 生成代码 (Embedded Coder)