主要内容

coder.cstructname

在生成的代码中命名C结构类型

描述

coder.cstructname命名生成的或外部定义的用于MATLAB的C结构类型®在生成的代码中表示为结构的变量。

例子

coder.cstructname (varstructName命名为MATLAB变量生成的C结构类型var.输入var可以是结构或单元数组。在生成代码的函数中使用此语法。的地方coder.cstructname在定义之后var而在第一次使用之前var.如果var入口点(顶级)函数输入参数,位置coder.cstructname在函数的开始,在任何控制流语句之前。

例子

coder.cstructname (varstructName“外来的”,“HeaderFile”,headerfile指定要使用的C结构类型var有名字structName在外部文件中定义,headerfileName

可以使用“外来的”选项,不指定头文件。但是,最佳实践是指定头文件,以便代码生成器生成# include语句在正确的位置。

coder.cstructname (varstructName“外来的”,“HeaderFile”,headerfile“对齐”,对齐还指定外部定义的结构类型的运行时内存对齐方式structName.如果你有嵌入式编码器®并使用自定义代码替换库(CRL),指定对齐方式,以便代码生成器能够匹配需要对齐结构的CRL函数。看到代码替换的数据对齐(嵌入式编码)

例子

outtype= coder.cstructname (intypestructName返回一个结构或单元格数组类型对象outtype指定要生成的C结构类型的名称。coder.cstructname创建outtype输入类型的属性intype.然后,它设置TypeName财产structName.对象使用的类型对象,使用此语法创建codegenarg游戏选择。不能在生成代码的函数中使用此语法。

中不能使用此语法MATLAB函数块。

outtype= coder.cstructname (intypestructName“外来的”,“HeaderFile”,headerfile返回类型对象outtype指定外部定义的C结构类型的名称和位置。代码生成器为具有type的变量使用外部定义的结构类型outtype

中不能使用此语法MATLAB函数块。

outtype= coder.cstructname (intypestructName“外来的”,“HeaderFile”,headerfile“对齐”,对齐创建一个类型对象outtype也指定了C结构类型对齐方式。

中不能使用此语法MATLAB函数块。

例子

全部折叠

在MATLAB函数中,myfun,指定名称MyStruct为变量生成的C结构类型v

函数y = myfun ()% # codegenv =结构(“一个”, 1“b”2);coder.cstructname (v,“myStruct”);y = v;结束

生成独立的C代码。例如,生成一个静态库。

codegen配置:自由myfun报告

要查看生成的结构类型,请打开codegen / lib / myfun / myfun_types.h或视图myfun_types.h在代码生成报告中。生成的C结构类型为:

Typedef struct {double a;双b;} myStruct;

在MATLAB函数中,myfun1,指定名称MyStruct到为该结构生成的C结构类型v.指定名称mysubStruct到为子结构生成的结构类型v.b

函数y = myfun ()% # codegenv =结构(“一个”, 1“b”结构(“f”3));coder.cstructname (v,“myStruct”);coder.cstructname (v.b“mysubStruct”);y = v;结束

生成的C结构类型mysubStruct是:

Typedef结构体{double f;} mysubStruct;

生成的C结构类型myStruct是:

Typedef struct {double a;mysubStruct b;} myStruct;

在MATLAB函数中,myfun2,指定名称myStruct为单元格数组生成的C结构类型c

函数Z = myfun2() c = {1 2 3};coder.cstructname (c,“myStruct”) z = c;

生成的C结构类型c是:

Typedef struct {double f1;双f2;双f3;} myStruct;

指定传递给C函数的结构具有在C头文件中定义的结构类型。

创建一个C头文件mycadd.h函数的mycadd它接受一个类型参数mycstruct.定义的类型mycstruct在头文件中。

#ifndef MYCADD_H #define MYCADD_H typedef struct {double f1;双f2;} mycstruct;双mycadd (mycstruct * s);# endif

编写C函数mycadd.c

#include  #include  #include "mycadd.h" double mycadd(mycstruct *s) {return s->f1 + s->f2;}

编写MATLAB函数mymAdd通过引用传递结构mycadd.使用coder.cstructname来指定在生成的代码中,该结构具有C类型mycstruct,定义在mycadd.h

函数y = mymAdd% # codegens =结构(“f1”, 1“f2”2);coder.cstructname(年代,“mycstruct”“外来的”“HeaderFile”“mycadd.h”);y = 0;y = coder.ceval (“mycadd”coder.ref (s));

为函数生成一个C静态库mymAdd

codegen配置:自由mymAddmycadd.c
生成的头文件mymadd_types.h不包含结构的定义mycstruct因为mycstruct是外部类型。

假设入口点函数myFunction接受一个结构参数。在命令行中指定输入参数的类型:

  1. 定义一个示例结构年代

  2. 创建一个类型T年代通过使用coder.typeof

  3. 使用coder.cstructname要创建一个类型T1:

    • 具有T

    • 命名生成的C结构类型myStruct

  4. 将类型传递给codegen通过使用arg游戏选择。

例如:

S =结构(“一个”、双(0)“b”单(0));T = coder.typeof(年代);T1 = coder.cstructname (T)“myStruct”);codegen配置:自由myFunctionarg游戏T1

或者,您可以直接从示例结构创建结构类型。

S =结构(“一个”、双(0)“b”单(0));T1 = coder.cstructname(年代,“myStruct”);codegen配置:自由myFunctionarg游戏T1

输入参数

全部折叠

MATLAB结构或单元数组变量,在生成的代码中表示为一个结构。

生成或外部定义的C结构类型的名称,指定为字符向量或字符串标量。

包含C结构类型定义的头文件,指定为字符向量或字符串标量。

指定文件的路径:

  • 使用codegen-我选择或其他包括目录的参数MATLAB编码器™应用程序设置自定义代码选项卡。

  • 对于一个MATLAB函数块,模拟目标代码生成>自定义代码窗格,在额外的构建信息,设置包括目录参数。

另外,使用coder.updateBuildInfo“addIncludePaths”选择。

例子:“mystruct.h”

用于生成或外部定义的结构的运行时内存对齐。

结构类型对象、单元格数组类型对象、结构变量或单元格数组变量,从中创建类型对象。

限制

  • 你不能申请coder.cstructname直接指向全局变量。若要命名要与全局变量一起使用的结构类型,请使用coder.cstructname创建命名结构类型的类型对象。然后,当你跑步的时候codegen,指定全局变量具有该类型。看到将C结构类型与全局结构变量一起命名(MATLAB编码器)

  • 对于单元格数组输入,外部定义的结构的字段名必须是f1f2,等等。

  • 你不能申请coder.cstructname直接指向类属性。

提示

  • 有关代码生成器如何确定结构字段的C/ c++类型的信息,请参见将MATLAB类型映射到生成代码中的类型(MATLAB编码器)

  • 使用coder.cstructname在结构数组上设置基元素的结构类型的名称,而不是数组的名称。因此,你不能申请coder.cstructname,然后将其应用到具有不同C结构类型名称的数组中。例如,以下代码是不允许的。第二个coder.cstructname尝试将基类型的名称设置为myStructArrayName,与前面指定的名称冲突,myStructName

    用字段a定义标量结构struct myStruct = (“一个”, 0);coder.cstructname (myStruct“myStructName”);用字段a定义一个结构数组myStructArray = repmat (myStruct 4 6);coder.cstructname (myStructArray“myStructArrayName”);

  • 应用coder.cstructname对结构数组的元素进行操作将产生与应用相同的结果coder.cstructname整个结构数组。如果你申请coder.cstructname对于结构数组的元素,必须使用单个下标来引用该元素。例如,你可以使用var (1),但不var (1, 1).应用coder.cstructnamevar (:)产生与应用相同的结果coder.cstructnamevarvar (n)

  • 异构单元数组在生成的代码中表示为结构。以下是使用时的注意事项coder.cstructname细胞数组:

    • 在生成代码的函数中使用coder.cstructname使用单元数组变量使单元数组异构。因此,如果单元格数组是一个入口点函数输入并且它的类型是永久同构的,那么您就不能使用coder.cstructname用细胞阵列。

    • 使用coder.cstructname用均匀编码器。CellType对象intype使返回的对象异构。因此,您不能使用coder.cstructname永久同质的编码器。CellType对象。有关单元格阵列何时永久同构的信息,请参见在命令行指定单元格阵列输入(MATLAB编码器)

    • 当与a连用时编码器。CellType对象,coder.cstructname创建一个编码器。CellType永久异构的对象。

  • 当您使用命名为coder.cstructname在具有行为主数组布局和列为主数组布局的项目中,代码生成器在某些情况下重命名结构,并附加row_col_到结构名的开头。这种重命名为两个数组布局中使用的类型提供了唯一的类型定义。

  • 这些建议只适用于MATLAB函数块:

    • MATLAB函数块输入和输出结构与总线信号相关联。为结构类型生成的名称来自总线信号名称。不要使用coder.cstructname为输入或输出信号命名结构类型。看到创建结构在MATLAB功能块

    • 代码生成器根据标识符命名规则生成结构类型名称,即使您使用coder.cstructname.如果你有Embedded Coder,你可以自定义命名规则。看到生成标识符的构造(嵌入式编码)

扩展功能

C / c++代码生成
使用MATLAB®Coder™生成C和c++代码。

GPU的代码生成
使用GPU Coder™为NVIDIA®GPU生成CUDA®代码。

介绍了R2011a