主要内容

本页翻译不是最新的。点击此处可查看最新英文版本。

对从 MATLAB 代码生成的 C/C++ 代码运行 Polyspace

从 MATLAB® 代码生成 C/C++ 代码后,您可以独立地检查生成的代码是否存在以下情况:

  • Bug 或缺陷和编码违规:使用 Polyspace® Bug Finder™

  • 运行时错误:使用 Polyspace Code Prover™

无论您是使用 MATLAB Coder™ 还是使用 codegen 命令来生成代码,您都可以遵循相同的工作流来检查生成的代码。

前提条件

要运行本教程,需要满足以下条件:

  • 您必须拥有 Embedded Coder® 许可证。MATLAB Coder 不会显示用于运行 Polyspace 的选项,除非您拥有 Embedded Coder 许可证。

  • 您必须熟悉如何打开和使用 MATLAB Codercodegen 命令。否则,请参阅 MATLAB Coder 快速入门。

  • 您必须将 Polyspace 与 MATLAB 安装相关联。请参阅将 Polyspace 与 MATLAB 和 Simulink 集成

示例文件

本教程使用 polyspaceroot\polyspace\examples\doc_cxx\matlab_coder 中的 MATLAB Coder 示例 averaging_filter。其中,polyspacroot 是 Polyspace 的安装文件夹,例如 C:\Program Files\Polyspace\R2024b。此示例显示了 Code Prover 的分析。对于 Bug Finder,您可以遵循类似的工作流。

运行 Polyspace 分析

MATLAB Coder 中,从 M 文件 averaging_filter 生成代码并分析生成的代码。

  1. 要打开 MATLAB Coder,请在 MATLAB 工具条中的 App 选项卡的代码生成下,点击 MATLAB Coder 图标。

  2. MATLAB Coder 中生成独立的 C/C++ 代码(静态库、动态链接库或可执行程序):

    1. 选择源文件页面上,导航到文件夹 polyspaceroot\polyspace\examples\doc_cxx\matlab_coder 并添加 M 文件 averaging_filter。函数 averaging_filter 会被自动检测为代码生成的入口函数。

      如果 M 文件位于只读位置,则该 App 可能会提示您将底层 MATLAB Coder 工程保存在可写位置。选择另存为以将工程保存在可写位置。

    2. 定义输入类型页面上,指定输入的数据类型。在此示例中,函数 averaging_filter 只有一个输入。您可以选择让我直接输入或输入全局类型,然后输入一个 double 类型的 1 X 100 向量

    3. 您可以跳过检查运行时问题页面(在常规工作流中,您将提供测试文件、生成 MEX 文件并检查运行时问题)。

    4. 生成代码页面上,选择以下选项:

      • 编译类型源代码

      • 语言C

      • 硬件板设备MATLAB 主机

      • 工具链自动定位已安装的工具链

    5. 点击生成按钮。

  3. 生成代码后,要分析生成的代码,请点击页面右上角的 Polyspace。在 Polyspace 页面上,点击运行

    A snapshot of the Polyspace pane in the MATLAB Coder App. The basic options that you have to specify on this pane are Product mode, Results type and Output folder.

    如果分析完成且无错误,则 Polyspace 结果会自动打开。

    如果您关闭结果,则可以从该 App 中的最终页面重新打开它们(位于生成的输出部分下)。结果存储在 results_averaging_filter 子文件夹中,该文件夹位于包含 MATLAB Coder 工程的文件夹中。

要为前面的工作流编写脚本,请运行:

% Generate code
matlabFileName = fullfile(polyspaceroot, 'polyspace',...
    'examples','doc_cxx','matlab_coder','averaging_filter.m');
codegenFolder = fullfile(pwd, 'codegenFolder');
codegen(matlabFileName, '-config:lib', '-c', '-args', ...
   {zeros(1,100,'double')}, '-d', codegenFolder);

% Configure Polyspace analysis
opts = pslinkoptions('ec');
opts.ResultDir = [tempdir 'results'];
opts.OpenProjectManager = 1;

% Run Polyspace
[polyspaceFolder, resultsFolder] = pslinkrun('-codegenfolder', codegenFolder, opts);

另请参阅

主题