如何MATLAB编码器分区生成的代码
分区生成的文件
默认情况下,代码生成过程中,MATLAB®编码器™分区代码以匹配您的MATLAB文件结构。这种一对一的映射允许您轻松地将你的文件生成编制MATLAB与C / c++代码。MATLAB编码器不能产生同样的一一对应MATLAB函数内联在生成的代码(见文件分区和内联)。
或者,您可以选择生成所有C / c++功能集中到一个单一的文件中。有关更多信息,请参见如何选择文件分区方法。这个选项有助于整合与现有的嵌入式软件代码。
如何选择文件分区方法
使用MATLAB编码器应用程序
打开生成对话框,在生成代码页面,点击生成箭头。
点击更多的设置。
在代码的外观选项卡,设置生成的文件分区方法来
为每个MATLAB文件生成一个文件
或生成所有功能集中到一个单一的文件中
。
在命令行
使用codegen
配置对象FilePartitionMethod
选择。例如,编译功能喷火
没有输入和生成一个C / c++文件为每个MATLAB函数:
创建一个墨西哥人配置对象和设置
FilePartitionMethod
选择:mexcfg = coder.config(墨西哥人);mexcfg。文件PartitionMethod = 'MapMFileToCFile';
使用
配置
选项,通过配置对象codegen
:codegen配置mexcfg - o禁用:内联foo %禁用内联来生成一个C / c++文件为每个MATLAB函数
分区生成的文件每一个C / c++文件MATLAB文件
默认情况下,不内联的MATLAB函数,MATLAB编码器生成一个C / c++文件为每个MATLAB文件。在这种情况下,MATLAB编码器分区生成的C / c++代码对应MATLAB文件。
如何MATLAB编码器分区入口点MATLAB功能
每个入口点(顶级)MATLAB函数,MATLAB编码器生成一个C / c++源代码,标题,和对象文件名称相同的MATLAB文件。
例如,假设您定义一个简单的函数喷火
调用函数身份
。源文件foo.m
包含以下代码:
函数y = foo (u, v)% # codegens =单(u);d =双(v);y =双重身份(身份(s)) + (d);
这里的代码identity.m
:
函数y =身份(u)% # codegeny = u;
在MATLAB编码器C程序,生成一个静态库foo.m
:
定义输入
u
和v
。有关更多信息,请参见指定的属性使用应用程序入口点函数的输入。打开生成对话框,在生成代码页面,点击生成箭头。
设置构建类型来
静态库
点击更多的设置。
在所有设置选项卡,在内联函数,设置内联阈值参数
0
点击关闭
生成库,点击生成。
生成一个静态库foo.m
在命令行输入:
codegen配置:自由- o禁用:内联foo args{0} %使用arg游戏选项指定u和v %真实,都是标量双打
MATLAB编码器生成源,标题,和对象文件喷火
和身份
在你的输出文件夹。
如何MATLAB编码器当地分区功能
对于每一个当地的函数,MATLAB编码器生成的代码相同的C / c++文件调用函数。例如,假设您定义一个函数喷火
调用本地函数身份
:
函数y = foo (u, v)% # codegens =单(u);d =双(v);y =双重身份(身份(s)) + (d);函数y =身份(u) y = u;
生成c++库,生成代码之前,选择一个c++编译器和c++设置为你的目标语言。例如,在命令行:
选择c++作为你的目标语言:
cfg = coder.config(“自由”)cfg.TargetLang =“c++”
生成c++库:
codegen配置cfg foo args{0} %使用arg游戏选项指定u和v %真实,都是标量双打
的主要功能
喷火
,MATLAB编码器内联的代码身份
本地函数。请注意
如果您指定
c++
,MATLAB编码器包装了C
代码. cpp
文件,这样您就可以使用c++
编译器和接口与外部c++
应用程序。这是一个生成的代码摘录的
foo.cpp
:…/ *函数定义* /双foo(双u,双v){返回(双)u + v(浮动);}……
如何MATLAB编码器分区重载函数
一个重载的函数是一个函数,它有多个实现适应不同类型的输入。对于每一个实现(即不内联),MATLAB编码器生成一个单独的C / c++文件,该文件包含一个独特的数字后缀。
例如,假设您定义一个简单的函数multiply_defined
:
% # codegen函数y = multiply_defined (u) y = u + 1;
然后添加的两个实现multiply_defined
,一个处理输入的类型单
(在一个@single
子文件夹),另一个用于输入的类型双
(在一个@double
子文件夹)。
打电话给每个实现,定义函数call_multiply_defined
:
% # codegen函数(y1, y2, y3) = call_multiply_defined y1 = multiply_defined (int32 (2));y2 = multiply_defined (2);y3 = multiply_defined(单(2));
接下来,为重载函数生成C代码multiply_defined
。例如,在MATLAB命令行,输入:
codegen - o禁用:内联配置:自由call_multiply_defined
MATLAB编码器生成C源、头和为每个实现的对象文件multiply_defined
,如高亮显示。使用数字后缀来创建独特的文件名。
生成的文件和位置
生成的文件的类型和位置取决于您所指定的目标。对所有目标,如果发生错误或警告在构建或如果您显式地请求一份报告,MATLAB编码器生成报告。
每一次MATLAB编码器产生同样的输出相同的代码或项目,它将文件从先前的构建。如果你想保存从一个构建文件,将它们复制到另一个位置开始前另一个构建。
生成的文件对墨西哥人的目标
默认情况下,MATLAB编码器为墨西哥人生成以下文件函数(墨西哥人
)目标。
类型的文件 | 位置 |
---|---|
特定于平台的墨西哥人文件 | 当前文件夹 |
墨西哥人,和C / c++源代码,标题,和对象文件 |
codegen /墨西哥人/function_name |
HTML报告 |
codegen /墨西哥人/function_name / html |
生成的文件的C / c++静态库的目标
默认情况下,MATLAB编码器为C / c++生成以下文件静态库的目标。
类型的文件 | 位置 |
---|---|
C / c++源、图书馆、头和对象文件 |
codegen / lib /function_name |
HTML报告 |
codegen / lib /function_name / html |
生成的文件的C / c++动态库的目标
默认情况下,MATLAB编码器为C / c++生成以下文件动态库的目标。
类型的文件 | 位置 |
---|---|
C / c++源、图书馆、头和对象文件 |
codegen / dll /function_name |
HTML报告 |
codegen / dll /function_name / html |
对C / c++生成的文件可执行的目标
默认情况下,MATLAB编码器为C / c++生成以下文件可执行的目标。
类型的文件 | 位置 |
---|---|
C / c++源、头和对象文件 |
codegen exe /function_name |
HTML报告 |
codegen exe /function_name / html |
生成的文件的名称和位置的变化
使用MATLAB编码器应用程序
改变 | 行动 |
---|---|
输出文件的名字 |
|
输出文件的位置 |
|
在命令行中。你可以改变生成的文件的名称和位置使用codegen
选项- o
和- d
。
文件分区和内联
如何MATLAB编码器分区生成的C / c++代码取决于你选择生成一个C / c++文件为每个MATLAB文件,是否你的MATLAB函数内联。
如果你 | MATLAB编码器 |
---|---|
生成所有C / c++和禁用内联功能集中到一个单一的文件 | 生成一个C / c++文件没有内联函数。 |
生成所有C / c++功能集中到一个单一的文件和支持内联 | 生成一个C / c++文件。内联函数的大小属于内联阈值。 |
生成一个C / c++文件为每个MATLAB文件和禁用内联 | 分区生成的C / c++代码与MATLAB文件结构。看到分区生成的文件与一个C / c++文件/ MATLAB文件。 |
生成一个C / c++文件为每个MATLAB文件和支持内联 | 内联函数在同一个地方C / c++文件的函数内联。 即使启用了内联,MATLAB编码器内联只有那些尺寸属于内联的函数阈值。对于不内联的MATLAB函数,MATLAB编码器分区生成的C / c++代码,描述。 |
之间的权衡文件分区和内联
重对内联文件分区代表之间的权衡可读性,效率,易于集成与现有的嵌入式软件MATLAB代码。
如果你产生 | 生成的C / c++代码 | 优势 | 缺点 |
---|---|---|---|
所有C / c++功能集中到一个单一的文件中 | MATLAB文件结构不匹配 | 更容易与现有的嵌入式软件集成 | 很难将C / c++代码映射到原始MATLAB文件 |
- file为每一个C / c++ MATLAB文件和支持内联 | 不完全匹配MATLAB文件结构 | 程序执行速度 | 很难将C / c++代码映射到原始MATLAB文件 |
一个C / c++为每个MATLAB - file文件并禁用内联 | 匹配MATLAB文件结构 | 容易将C / c++代码映射到原始MATLAB文件 | 程序运行效率较低 |
禁用内联如何影响文件分区
内联默认情况下是启用的。因此,生成一个C / c++文件为每个顶级MATLAB函数,你必须:
选择生成一个C / c++文件为每个顶级MATLAB函数。有关更多信息,请参见如何选择文件分区方法。
显式禁用内联,全球或个人MATLAB函数。
如何禁用内联在全球范围内使用吗MATLAB编码器应用程序
打开生成对话框,在生成代码页面,点击生成箭头。
点击更多的设置。
在所有设置选项卡,在内联函数设置内联阈值来
0
。
如何禁用内联全球在命令行。禁用的内联函数,使用- o禁用:内联
选项codegen
。例如,禁用内联和生成一个墨西哥人函数的函数喷火
没有输入:
codegen - o禁用:内联foo
有关更多信息,请参见的描述codegen
。
如何为个人禁用内联函数。禁用个别MATLAB内联函数,添加指令coder.inline('永远');
源MATLAB文件在一个单独的行,函数签名。
函数y = foo (u, v)% # codegencoder.inline (“永远”);s =单(u);d =双(v);y =双重身份(身份(s)) + (d);
codegen
不内联入口点函数。
的coder.inline
指令只适用于函数在它出现。在这个例子中,内联函数是禁用的喷火
,但不是身份
顶级函数定义在一个单独的MATLAB文件,并调用喷火
。禁用的内联身份
函数签名后,添加这个指令的源文件identity.m
。有关更多信息,请参见coder.inline
。
更有效的方法禁用的内联函数,看看如何禁用内联全球在命令行吗。
相关的C / c++代码与内联函数
关联的C / c++代码生成与原内联函数,在MATLAB代码添加注释来识别功能。这些评论将出现在C / c++代码,帮助你将生成的代码映射回原MATLAB函数。
修改内联阈值
改变内联的行为,调整内联阈值参数。
修改阈值使用内联MATLAB编码器应用程序
打开生成对话框,在生成代码页面,点击生成箭头。
点击更多的设置。
在所有设置选项卡,在内联函数,设置的值内联阈值参数。
在命令行修改内联阈值。设置的值InlineThreshold
参数的配置对象。看到coder.MexCodeConfig
,coder.CodeConfig
,coder.EmbeddedCodeConfig
。