主要内容

如何MATLAB编码器分区生成的代码

分区生成的文件

默认情况下,代码生成过程中,MATLAB®编码器™分区代码以匹配您的MATLAB文件结构。这种一对一的映射允许您轻松地将你的文件生成编制MATLAB与C / c++代码。MATLAB编码器不能产生同样的一一对应MATLAB函数内联在生成的代码(见文件分区和内联)。

或者,您可以选择生成所有C / c++功能集中到一个单一的文件中。有关更多信息,请参见如何选择文件分区方法。这个选项有助于整合与现有的嵌入式软件代码。

如何选择文件分区方法

使用MATLAB编码器应用程序

  1. 打开生成对话框,在生成代码页面,点击生成箭头

  2. 点击更多的设置

  3. 代码的外观选项卡,设置生成的文件分区方法为每个MATLAB文件生成一个文件生成所有功能集中到一个单一的文件中

在命令行

使用codegen配置对象FilePartitionMethod选择。例如,编译功能喷火没有输入和生成一个C / c++文件为每个MATLAB函数:

  1. 创建一个墨西哥人配置对象和设置FilePartitionMethod选择:

    mexcfg = coder.config(墨西哥人);mexcfg。文件PartitionMethod = 'MapMFileToCFile';

  2. 使用配置选项,通过配置对象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:

  1. 定义输入uv。有关更多信息,请参见指定的属性使用应用程序入口点函数的输入

  2. 打开生成对话框,在生成代码页面,点击生成箭头

  3. 设置构建类型静态库

  4. 点击更多的设置

  5. 所有设置选项卡,在内联函数,设置内联阈值参数0

  6. 点击关闭

  7. 生成库,点击生成

生成一个静态库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++设置为你的目标语言。例如,在命令行:

  1. 选择c++作为你的目标语言:

    cfg = coder.config(“自由”)cfg.TargetLang =“c++”

  2. 生成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编码器应用程序

改变 行动
输出文件的名字
  1. 打开生成对话框,在生成代码页面,点击生成箭头

  2. 输出文件的名字字段中,输入文件名。

输出文件的位置
  1. 打开生成对话框,在生成代码页面,点击生成箭头

  2. 点击更多的设置

  3. 路径选项卡,设置建立文件夹指定的文件夹

  4. 建立文件夹名称字段中,浏览到输出文件的位置或输入完整路径。输出文件的位置必须不包含:

    • 空间(空间会导致代码生成失败在某些操作系统配置)。

    • 选项卡

    • \,美元,#,*,吗?

    • Non-7-bit ASCII字符,如日本的角色。

在命令行中。你可以改变生成的文件的名称和位置使用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编码器应用程序

  1. 打开生成对话框,在生成代码页面,点击生成箭头

  2. 点击更多的设置

  3. 所有设置选项卡,在内联函数设置内联阈值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编码器应用程序

  1. 打开生成对话框,在生成代码页面,点击生成箭头

  2. 点击更多的设置

  3. 所有设置选项卡,在内联函数,设置的值内联阈值参数。

在命令行修改内联阈值。设置的值InlineThreshold参数的配置对象。看到coder.MexCodeConfig,coder.CodeConfig,coder.EmbeddedCodeConfig