如果使用 Embedded Coder从 Simulink® 模型中生成代码,则可以在 Simulink 环境中使用 Polyspace分析生成的代码是否存在 Bug 或运行时错误。不必手动设置 Polyspace 工程。
1. 前提条件
在从 Simulink 中运行 Polyspace 之前,必须将已安装的 Polyspace 与 MATLAB 相关联。
2. 生成并分析代码
详细步骤如下图所示:
配置代码生成并生成代码
要配置代码生成并从某个模型生成代码,请执行以下操作之一:
- 在 App 选项卡上,选择 Embedded Coder。然后,在 C 代码选项卡上,选择快速启动。按照屏幕上的说明进行操作。
- 在 C 代码选项卡上,点击设置并通过 Simulink 配置参数配置代码生成。要设置的主要参数如下:
- 类型 (Simulink):选择定步长。
- 求解器 (Simulink):选择自动(自动求解器选择) 或离散(无连续状态)。
- 系统目标文件 (Simulink Coder):输入 ert.tlc 或 autosar.tlc。如果您从 ert.tlc 派生目标文件,则还可以对其进行指定。
- Code-to-model (Embedded Coder):选择此选项可启用从代码到模型的链接。
要从模型生成代码,请在 C 代码 选项卡上选择生成代码。您可以在诊断查看器中跟踪代码的生成进度。
配置代码分析
在 App 选项卡上,选择 Polyspace 代码验证器。在 Polyspace 选项卡上:
- 选择要运行的产品:Bug Finder 或 Code Prover。Code Prover 分析可检测运行时错误,而 Bug Finder 分析可检测编码缺陷和编码违规。
- 选择设置。如果需要,可更改这些选项的默认值。
- 设置来源:除工程配置中指定的默认检查之外,还支持对 MISRA™ 编码规则的检查。默认 Bug Finder 检查会查找编码缺陷。默认 Code Prover 检查会查找运行时错误。
- Input、Tunable parameters和Output:对输入、可调参数或输出进行约束,以执行更精确的 Code Prover 分析。
- Output folder:为结果指定一个专用文件夹。默认分析会将结果保存在当前工作文件夹的 results_modelName 文件夹中。
- Open results automatically after verification
分析代码
要分析从模型生成的代码,请点击画布上的任意位置。分析以下来源的代码字段显示模型名称。选择运行分析。
使用 Embedded Coder 时,Polyspace 会在您点击运行分析时检查生成的代码。如果不存在生成的代码,或者模型自上次执行 Polyspace 分析以来已发生更改,则 Polyspace 首先会启动代码生成过程,然后再开始进行分析。
如果另一个模型中引用了当前模型,并且您希望在引用该模型的上下文中验证生成的代码,请使用生成的模型引用代码而非生成的顶层模型代码。在后一种情况下,如果不存在生成的代码,则 Polyspace 不会自动启动代码生成。分析生成的模型引用代码时,请在运行 Polyspace 分析前生成代码。
您可以在 MATLAB 命令窗口中跟踪分析进度。
结果将自动打开,除非被显式禁用。默认情况下,结果将保存在当前文件夹的 results_ModelName
文件夹中。每次新运行时都会覆盖以前的结果。您可以更改默认文件夹或将结果保存到 Simulink 工程。要进行这些更改,请在 Polyspace 选项卡上选择设置。
Polyspace如果您已关闭结果并要在稍后打开它们,请在 选项卡上选择分析结果。要打开上次运行之前的结果,请选择打开较早的结果并导航到包含之前结果的文件夹。
3. 查看分析结果
在代码中审查结果
结果显示在 Polyspace 用户界面的结果列表窗格中。点击每个结果即可在源窗格中查看源代码,并在结果详细信息窗格中查看详细信息。
从代码导航到模型
代码注释中的链接会显示生成后续代码行的模块。要查看模型中的模块,请点击链接中的模块名称。
另外,您也可以右键点击变量名称并选择转至模型。此选项并非适用于所有变量。只有部分源代码变量可以直接追溯到 Simulink 模块。转至模型选项适用于此类变量。
修复问题
调查代码中的问题是否与模型中的设计缺陷相关。
模型中的设计缺陷可能会导致生成的代码出现问题。例如:
- 仅当某个模块参数处于特定范围时,生成的代码才有可能不出现特定的运行时错误。要修复此问题,您可以使用配置参数Tunable parameters更改该模块参数的存储类,或使用标定数据进行分析。
- 仅当输入处于特定范围时,生成的代码才有可能不出现特定的运行时错误。要确定该不出错的范围,您可以为 Inport 模块信号指定最小值和最大值。Polyspace 分析将使用此受限范围。
- Stateflow® 图中的某些转换可能无法实现
可以将生成的代码与手写代码集成。Polyspace 分析可以检测由集成引起的编码缺陷和编码违规。如果您的 Simulink 模型中包含任何手写代码,您可以单独分析包含的手写代码。
4. 为模块添加注释以对问题进行申述
可能要在不修改代码或模型的情况下对某些 Polyspace 结果进行申述。请通过 Polyspace 用户界面或 Simulink 编辑器为 Simulink 模块添加注解