Main Content

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)

相关主题