主要内容

MATLAB 代码生成 C/C++ 代码

在验证 MEX 代码行为后,为您的工程生成独立代码。

  1. 指定输入类型。

  2. 检查是否存在运行时问题。

  3. 配置代码生成编译设置。

  4. 生成独立的 C/C++ 代码。

  5. 了解生成的代码。

指定输入类型

在生成代码之前,向代码生成器提供输入类型。然后,代码生成器确定要在生成的代码中使用的数据类型。

要自动定义输入类型,请使用示例输入调用您的函数,或在提示符下输入调用您的函数的脚本。通过提供示例输入来直接提供输入类型。如果您的代码需要大小为 3×4 的双精度矩阵,则示例输入可以是 zeros(3,4)ones(3,4)

有关详细信息,请参阅代码生成的输入类型设定

检查运行时问题

在为代码生成器定义输入类型后,需要执行初始代码生成和代码执行,以检测在生成代码中较难诊断的运行时错误。

  1. 要为您的代码生成并运行 MEX 文件,请点击运行生成的 MEX 按钮。

  2. 要自动打开代码生成报告,请启用始终创建报告生成报告后自动启动报告配置参数。

请参阅使用 MEX 函数检查 MATLAB 代码中的问题

配置代码生成编译设置

要根据您的需求创建代码,您可以更改代码生成器的配置设置。在 MATLAB Coder 工具条选项卡中,点击设置按钮。“独立代码生成设置”对话框将打开,其中列出修改生成代码的配置设置。

使用这些设置可以指定生成代码的编译位置,应用特定于目标的优化,启用可变大小支持,在生成代码中包括注释,以及为生成代码应用其他自定义设置。

生成独立的 C/C++ 代码

在通过生成 MEX 文件检查运行时问题后,通过在工具条中选择所需的输出类型生成独立 C/C++ 代码。

要为您的工程生成源代码,请点击生成代码。要同时生成源代码并编译生成的代码,请打开生成代码下的下拉菜单,然后点击生成代码并编译

了解生成的代码

访问代码生成报告

使用代码生成报告查看生成的 C/C++ 代码,在 MATLAB® 代码和生成的 C/C++ 代码之间追溯,并识别生成的代码中的潜在问题。

在生成代码后,要打开代码生成报告,请执行以下操作。

有关详细信息,请参阅Code Generation Reports

生成的代码中的数组布局

编程语言和环境通常为数据假设单一的数组布局。MATLAB 默认使用列优先布局,而 C 和 C++ 使用行优先布局。

要生成行优先代码,请将数组布局配置参数设置为行优先

请参阅Code Design for Row-Major Array Layout

生成的代码中的内存分配

对于代码生成,数组维度为固定大小可变大小。如果代码生成器可以确定维度的大小并且维度的大小不会更改,则维度为固定大小。当数组的所有维度都是固定大小时,该数组是固定大小数组。

您可以生成在程序堆栈或堆上为固定大小和可变大小数组分配内存的代码。

静态内存分配在编译时为程序堆栈上的数组分配内存。在以下情况下,静态分配是有益的:

  • 您知道所有正在使用的数组的上界。

  • 您有很大的程序堆栈。

  • 这些数组很小,在程序堆栈中占用的空间较少。

动态内存分配在运行时在堆上动态分配内存,而不是在堆栈上静态分配内存。在以下情况下,动态内存分配是有益的:

  • 您不知道数组的上界。

  • 您不想在堆栈上为大型数组分配内存。

动态内存分配会导致所生成代码的执行速度变慢。请参阅控件可变大小数组的内存分配

要在生成的代码中为固定大小和可变大小数组动态分配内存,请使用以下配置参数:

提示

定义无界数组的最大大小

如果您正在为其大小取决于用户输入的数组生成代码,您仍可以通过使用 assert 函数来设置此类输入的上限。例如:

function inSize(n)
assert(n < 25);
y = zeros(1,n);
end
当无法使用动态内存分配时,请定义数组的上界。

文件 I/O 支持

代码生成器包括对 coder.loadfreadfopenfprintffclose 等函数的有限支持。

从 C 工程中调用生成的代码

代码生成器提供了一个示例主函数,供您在生成静态或动态库时参考。请参阅在应用程序中使用示例 C 主函数

在命令行中生成代码

您可以在命令行中生成代码并设置所有代码生成选项。请参阅 codegencoder.config

您也可以在命令行中使用代码配置对象设置这些选项。这些选项是配置对象的属性,可通过圆点表示法访问。请参阅 coder.MexCodeConfigcoder.CodeConfigcoder.EmbeddedCodeConfig

注意

要打开包含关联的编译配置设置的对话框,请双击工作区中的配置对象。

将工程转换为脚本

您也可以使用 coder 命令的 -tocode 选项将工程转换为脚本。

优化生成的代码

虽然代码生成器可以为大多数应用程序生成优化的代码,但您可以通过遵循以下一些最佳做法来为工程生成高效的 C/C++ 代码:

  • 按引用传递参量

  • 内联代码

  • 集成优化的外部代码

  • 禁用运行时检查

有关详细信息,请参阅优化生成的 C/C++ 和 MEX 代码

在命令行中创建报告

在命令行中生成代码时,请使用以下 codegen 选项:

  • 要生成报告,请使用 -report 选项。

  • 要生成并打开报告,请使用 -launchreport 选项。

或者,使用以下配置对象属性:

  • 要生成报告,请将 GenerateReport 设置为 true

  • 如果您希望 codegen 命令为您打开报告,请将 LaunchReport 设置为 true

另请参阅

| | | | | | | | |

主题