准备 MATLAB 代码以进行代码生成
为了生成 C/C++ 代码,代码生成器将动态定型的 MATLAB® 代码转换为静态定型的 C/C++ 代码。在动态定型语言中,给定变量的类、大小和复/实性可能在运行时发生变化。相比之下,静态定型语言必须在编译时确定变量类型。
在生成代码之前,确定要为哪个函数生成代码。此函数称为入口函数或主函数。要准备您的代码以进行代码生成,请执行下列步骤:
初始化变量以进行代码生成。
筛查包含不支持的函数和语言功能的代码。
初始化变量以进行代码生成
由于生成的代码是静态定型的,请在使用之前初始化代码中的所有变量,以允许代码生成器在生成代码中正确地识别和分配变量。要识别其中一些问题,请在代码中包含以下行:
%#codegen
原始代码 | 问题 | 修改后的代码 |
---|---|---|
y = zeros(1,10); y(3) = 1 + 2i; | y 定义为双精度类型,但被赋予了复数双精度值。 | y = complex(zeros(1,10)); y(3) = 1 + 2i; |
for i = 1:N y(i,i) = i; end | 数组 y 在未定义的情况下进行了动态扩展。 | y = zeros(N,N); for i = 1:N y(i,i) = i; end |
有关特定数据类型的代码生成的数据定义的信息,请参阅代码生成的数据定义注意事项和为 C/C++ 代码生成定义变量的最佳做法。
筛查包含不支持的函数和语言功能的代码
代码生成器支持大多数语言功能和函数。请参阅C/C++ 代码生成支持的函数和对象。要检查代码中是否包含不支持的函数和语言功能,请执行下列步骤:
从 App 选项卡启动 MATLAB Coder™。或者,在命令行中输入以下内容:
>> coder
在 App 中输入入口函数名称。不要在此步骤中添加子函数。代码生成器会自动包含必需的子函数。
要查看代码中不支持的函数或语言功能,请点击下一步以打开代码生成就绪工具报告。
或者,对入口函数调用 coder.screener
函数。在命令行中输入:
coder.screener('filename');
此函数会解析您的代码,并突出显示不支持的 MATLAB 函数和一些不支持的语言功能。请参阅 coder.screener
。
如果您的代码包含不支持的函数,请考虑以下解决方法:
检查是否存在支持代码生成的替换函数和 System object。
为不支持的函数编写自定义代码。
使用
coder.ceval
调用自定义 C 函数来替换不支持的函数。使用
coder.extrinsic
调用不支持的函数。
有关这些解决办法的更多详细信息,请参阅解决错误:代码生成不支持函数。
提示
在命令行中设置高级代码生成选项
对配置对象 coder.config
使用 codegen
函数。根据编译的类型,您还可以使用 coder.CodeConfig
、coder.EmbeddedCodeConfig
和 coder.MexCodeConfig
。
研究特定函数的代码生成注意事项
代码生成支持的函数的参考页包含标题为扩展功能的节。该节列出了为这些函数生成代码时的特殊注意事项。有关示例,请参阅 interp2
中的扩展功能。
调用 coder.extrinsic
调用 coder.extrinsic
会将函数声明为外部函数。代码生成器不为外部函数体生成代码,而是使用 MATLAB 引擎来执行调用。
另请参阅
coder.target
| coder.screener
| coder.ceval
| coder.extrinsic
| codegen
| coder.config
| coder.CodeConfig
| coder.EmbeddedCodeConfig
| coder.MexCodeConfig