主要内容

运行Polyspace代码生成分析嵌入式编码器

如果您从Simulink生成代码万博1manbetx®模型使用嵌入式编码器®或TargetLink®,您可以使用Polyspace分析生成的代码中的bug或运行时错误®从Simulink环境中。您不必万博1manbetx手动设置多边形空间项目。

本主题使用嵌入式编码器生成代码。有关TargetLink生成代码的分析,请参阅对用TargetLink生成的代码运行Polyspace分析

有关特定模型的教程,请参见对由Simulink模型生成的代码进行多空间分析万博1manbetx

先决条件

在从Simulink运行Polyspace之前,必须将Pol万博1manbetxyspace与MATLAB链接起来®安装。看见利用MATLAB和Simulink集成Polyspace万博1manbetx

生成和分析代码

配置代码生成和生成代码

要配置代码生成并从模型生成代码,请执行以下其中之一

  • 应用程序选项卡,选择嵌入式编码器.然后,在C代码选项卡,选择快速启动.按照屏幕上的说明操作。

  • C代码选项卡上,单击设置并通过Simulink配置参数配置代码生成。要设置的主要参数有:万博1manbetx

    • 类型(万博1manbetx模型):选择固定步

    • 解算器(万博1manbetx模型):选择自动(自动解算器选择)离散(无连续状态)

    • 系统目标文件(万博1manbetx仿真软件编码器):输入ert.tlcautosar.tlc.如果你从ert.tlc,也可以指定它们。

    • Code-to-model(嵌入式编码):选择此选项可启用从代码到模型的链接。

    有关要设置的参数的完整列表,请参见Polyspace分析的推荐模型配置参数

    或者,使用目标运行代码生成顾问Polyspace并查看是否已经设置了所需的参数。看到使用代码生成顾问为代码生成目标配置模型(嵌入式编码)

    从模型生成代码,在C代码选项卡,选择生成代码. 您可以在诊断查看器中跟踪代码生成的进度。

配置代码分析

应用程序选项卡,选择Polyspace代码验证器. 上Polyspace标签:

  1. 选择要运行的产品:错误发现者代码验证程序

  2. 选择设置.如果需要,请更改这些选项的默认值。

    • 设置从:启用MISRA检查®除了在项目配置中指定的默认检查之外的编码规则。默认的Bug查找器检查并查找Bug。默认代码验证程序检查查找运行时错误。

    • 输入可调参数输出:约束输入、可调参数或输出,以实现更精确的代码验证分析。

    • 输出文件夹:为结果指定专用文件夹。默认分析将结果保存在文件夹中results_modelName在当前工作文件夹中。

    • 验证后自动打开结果

    有关要设置的选项的完整列表,请参见Simulink中的Bug查找器分析万博1manbetx

分析代码

要分析从模型生成的代码,请单击画布上的任何位置。的分析代码字段显示模型名称。选择运行分析

当使用Embedded Coder时,Polyspace会在单击时检查生成的代码运行分析.如果没有生成的代码,Polyspace首先启动代码生成过程,然后开始分析。

如果当前模型在另一个模型中引用,并且您希望在引用该模型的上下文中验证生成的代码,而不是作为顶级模型生成的代码,使用作为模型引用生成的代码.在后一种情况下,如果没有生成代码,Polyspace不会自动启动代码生成。在分析作为模型引用生成的代码,在运行Polyspace分析之前生成代码。

您可以在MATLAB命令窗口中跟踪分析的进度。

除非明确禁用,否则结果将自动打开。默认情况下,结果保存在文件夹中results_ModelName在当前文件夹中。每次新的运行都会覆盖以前的结果。您可以更改默认文件夹或将结果保存到Simulink项目中。万博1manbetx要做出这些改变,就在Polyspace选项卡,选择设置

如果您已经关闭了结果,并想稍后打开它们,在Polyspace选项卡,选择分析结果.要在最后一次运行之前打开结果,请选择开放前的结果并导航到包含前面结果的文件夹。

回顾分析结果

检查代码中的结果

结果显示在上的Polyspace用户界面中结果列表窗格。单击每个结果以查看源代码窗格和详细信息结果细节窗玻璃另见:

从代码导航到模型

代码注释中的链接显示生成后续代码行的块。要查看模型中的块,请单击链接中的块名称。如果遇到问题,请参阅故障排除导航从代码到模型

或者,您可以右键单击变量名称并选择去模型.这个选项不是对所有变量都可用。只有源代码变量的子集可以直接追踪到Simulink块。万博1manbetx的去模型对于这样的变量,可以使用选项。有关生成代码中哪些变量可以跟踪到Simulink块的详细信息,请参见万博1manbetx跟踪生成代码万博1manbetx中的Simulink模型元素(嵌入式编码)

解决问题

调查代码中的问题是否与模型中的设计缺陷有关。

模型中的设计缺陷可能导致生成的代码出现问题。例如:

  • 生成的代码只有在块参数的特定范围内才可能没有特定的运行时错误。要解决这个问题,可以通过配置参数更改块参数的存储类或使用校准数据进行分析可调参数

  • 生成的代码可能只有在特定的输入范围内没有特定的运行时错误。要确定此无错误范围,可以为输入块信号指定最小值和最大值。多边形空间分析使用此受约束的范围。看见在块中处理信号范围(万博1manbetx模型)

  • 状态流中的某些转换®图表可能无法访问。

如果在s -函数块中包含手写的C/ c++代码,Polyspace分析可以揭示手写代码和生成代码之间可能存在的集成问题。您还可以单独分析手写代码。看到对s函数代码进行多空间分析

注释块以证明问题

如果您不想对模型进行更改以响应Polyspace结果,请对相关块进行注释。在注释一个块之后,从该块生成的代码操作将显示用注释预填充的结果。如果注释了子系统块或导致函数调用的块,则从块生成的代码操作不会在分析结果中显示注释。如果块是查找表,则启用存根查找表而不是使用注释。看见存根查找表

在使用嵌入式编码器生成的代码中,存在与MISRA C的已知偏差®:2012.见MISRA C:2012合规性的偏差理由(嵌入式编码).通过注释块来证明这些已知的问题。

Simulink块或生成代码中万博1manbetx的注释不考虑分析的历史记录。如果更新模型,则多边形空间结果可能会更改,而注释不会更改。更新模型可能会使现有注释过时。更新模型或生成的代码时,请检查注释。

通过注释块Polyspace用户界面

如果您使用Embedded Coder生成代码,您可以直接通过Polyspace用户界面注释Simulink块。万博1manbetx定位要注释的问题,然后通过添加输入评审信息严重程度状态,以及可选的注释结果细节窗格。例如,在Polyspace用户界面中:

  • 设定状态将问题提交给调查

  • 设定评论这个问题可能会影响“模块”

在源代码中,右键单击显示问题的变量(或同一表达式中的另一个变量),并从上下文菜单中选择注释块

评审信息作为块注释传递到Simulink Editor中,注释的块被突出显示。万博1manbetx

您可以对一个Simulink块进行多次万博1manbetx注释。块上的后续注释会被附加到之前的注释。在Simulink编辑器中看不到这些注释。万博1manbetx当您使用Polyspace分析生成的代码时,这些注释将作为评审信息显示在结果细节窗格的Polyspace用户界面。

Polyspace使用用户提供的信息在Simulink中预填充注释。在Polyspace用户界面中设置的注释显示在万博1manbetx评论仿真软件。万博1manbetx如果你在Polyspace User界面的注释中使用了双引号,那么在Simulink中就会用单引号代替。万博1manbetx

选择权注释块可用于可跟踪到Simulink块的代码元素。有关更多信息,请参阅万博1manbetx跟踪生成代码万博1manbetx中的Simulink模型元素(嵌入式编码)

注释块万博1manbetx编辑

要在Simulink编辑器中注释块,请选择该块并在万博1manbetxPolyspace选项卡,选择添加注释.在Polyspace注释亮点:

  • 从下拉菜单中选择要注释的Polyspace结果的类型注释类型

  • 如果要注释同一类型的多个结果,请在文本框中输入以逗号分隔的结果缩略词列表。看到的:

  • 如果您只想注释一个结果,请选择只有1检查.文本框被转换为下拉菜单。从下拉菜单中选择要注释的结果。

  • 在相应的文本框中,输入要分配给结果的状态、严重性和注释。

Polyspace注释窗口中,可以一次注释单个类型的多边形空间结果。注释多种类型的结果。打开Polyspace注释窗口多次打开。每次,添加一个对应于一种类型的多边形空间结果的注释。不同的注释会相互附加。在Simulink编辑器中无法看到这些注释。当您使用Polyspace分析生成的代码时,这些注释将作为审阅信息显示在万博1manbetx结果细节窗格的Polyspace用户界面。

有时,生成代码中的操作会导致代码验证程序中出现橙色检查。假设一个操作可能溢出。生成的代码通过跟随饱和操作来防止溢出。Polyspace仍然将可能的溢出标记为橙色检查。要通过代码注释验证这些检查,请指定配置参数运算符注释(嵌入式编码)

当您复制一个带注释的块,然后在不同的模型或相同模型的不同位置使用它时,更改的上下文可能会使注释显示不正确。

  • Polyspace不允许在库和非原子子系统中的块中进行注释,因为这些块可以在许多不同的上下文中重用。例如,您不能在库块中注释一个块,并在库块的所有实例上验证结果。

  • 万博1manbetxSimulink不会在复制到不同模型或相同模型中不同位置的块中保留Polyspace注释。

相关的话题