从 MATLAB 代码生成 C/C++ 代码
在验证 MEX 代码行为后,为您的工程生成独立代码。
指定输入类型。
检查是否存在运行时问题。
配置代码生成编译设置。
生成独立的 C/C++ 代码。
了解生成的代码。
指定输入类型
在生成代码之前,向代码生成器提供输入类型。然后,代码生成器确定要在生成的代码中使用的数据类型。
要自动定义输入类型,请使用示例输入调用您的函数,或在提示符下输入调用您的函数的脚本。通过提供示例输入来直接提供输入类型。如果您的代码需要大小为 3
×4
的双精度矩阵,则示例输入可以是 zeros(3,4)
或 ones(3,4)
。
有关详细信息,请参阅代码生成的输入类型设定。
检查运行时问题
在为代码生成器定义输入类型后,需要执行初始代码生成和代码执行,以检测在生成代码中较难诊断的运行时错误。
要为您的代码生成 MEX 文件,请点击检查问题按钮。
您可以通过在更多设置下的调试部分中选择始终创建代码生成报告选项来自动打开代码生成报告。
配置代码生成编译设置
要根据您的需求创建代码,您可以更改代码生成器的配置设置。在 App 的生成代码选项卡中,选择选项卡底部的更多设置按钮。此窗口列出用于修改生成代码的配置设置。
使用这些设置可以指定生成代码的编译位置,应用特定于目标的优化,启用可变大小支持,在生成代码中包括注释,以及为生成代码应用其他自定义设置。
生成独立的 C/C++ 代码
在通过生成 MEX 文件检查运行时问题后,通过在 App 的生成代码选项卡下选择所需的编译类型来生成独立的 C/C++ 代码。
要为您的工程生成代码,请点击生成。
了解生成的代码
访问代码生成报告
使用代码生成报告查看生成的 C/C++ 代码,在 MATLAB® 代码和生成的 C/C++ 代码之间追溯,并识别生成的代码中的潜在问题。
在生成代码后,要打开代码生成报告,请执行以下操作。
在 MATLAB Coder™ 的调试设置中,选中始终创建报告和生成报告后自动启动报告复选框。
有关详细信息,请参阅Code Generation Reports。
生成的代码中的数组布局
编程语言和环境通常为所有数据假设单一的数组布局。MATLAB 默认使用列优先布局,而 C 和 C++ 使用行优先布局。
要生成行优先代码,请执行以下操作:
在 App 中,打开生成对话框。在生成代码页上,点击生成箭头。
点击更多设置。
在内存选项卡上,将数组布局设置为“
行优先
”。
生成的代码中的内存分配
对于代码生成,数组维度为固定大小或可变大小。如果代码生成器可以确定维度的大小并且维度的大小不会更改,则维度为固定大小。当数组的所有维度都是固定大小时,该数组是固定大小数组。
您可以生成在程序堆栈或堆上为固定大小和可变大小数组分配内存的代码。
静态内存分配在编译时为程序堆栈上的数组分配内存。在以下情况下,静态分配是有益的:
您知道所有正在使用的数组的上界。
您有很大的程序堆栈。
这些数组很小,在程序堆栈中占用的空间较少。
动态内存分配在运行时根据需要在堆上分配内存,而不是在堆栈上静态分配内存。在以下情况下,动态内存分配是有益的:
您不知道数组的上界。
您不想在堆栈上为大型数组分配内存。
动态内存分配会导致所生成代码的执行速度变慢。请参阅Control Memory Allocation for Variable-Size Arrays。
要在生成的代码中为固定大小和可变大小数组动态分配内存,请执行以下操作:
在 App 中,打开生成对话框。在生成代码页上,点击生成箭头。
点击更多设置。
在内存选项卡上,从下拉列表中为可变大小数组的动态内存分配选择值。
在内存选项卡上,从下拉列表中为固定大小数组的动态内存分配选择值
将这些选项设置为 'Threshold'
会导致动态分配大小(以字节为单位)大于阈值的数组。
提示
定义无界数组的最大大小
如果您正在为其大小取决于用户输入的数组生成代码,您仍可以通过使用 assert
函数来设置此类输入的上限。例如:
function inSize(n) assert(n < 25); y = zeros(1,n); end
文件 I/O 支持
代码生成器包括对 coder.load
、fread
、fopen
、fprintf
和 fclose
等函数的有限支持。
从 C 工程中调用生成的代码
代码生成器提供了一个示例主函数,供您在生成静态或动态库时参考。请参阅在应用程序中使用示例 C 主函数。
在命令行中生成代码
您可以在命令行中生成代码并设置所有选项。请参阅 codegen
和 coder.config
。
您也可以在命令行中使用代码配置对象设置这些选项。这些选项是配置对象的属性,可通过圆点表示法访问。请参阅 coder.MexCodeConfig
、coder.CodeConfig
和 coder.EmbeddedCodeConfig
。
注意
要打开包含关联的编译配置设置的对话框,请双击工作区中的配置对象。
将工程转换为脚本
您也可以使用 coder
命令的 -tocode
选项将工程转换为脚本。
优化生成的代码
虽然代码生成器可以为大多数应用程序生成优化的代码,但您可以通过遵循以下一些最佳做法来为工程生成高效的 C/C++ 代码:
按引用传递参数
内联代码
集成优化的外部代码
禁用运行时检查
有关详细信息,请参阅优化策略。
在命令行中创建报告
在命令行中生成代码时,请使用以下 codegen
选项:
要生成报告,请使用
-report
选项。要生成并打开报告,请使用
-launchreport
选项。
或者,使用以下配置对象属性:
要生成报告,请将
GenerateReport
设置为true
。如果您希望
codegen
命令为您打开报告,请将LaunchReport
设置为true
。
另请参阅
coder.cstructname
| coder.MexCodeConfig
| coder.CodeConfig
| coder.EmbeddedCodeConfig
| coder.load
| fread
| fclose
| fprintf
| fopen
| coder.opaque