文档

Coder.cstructName.

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

描述

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

例子

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

例子

coder.cstructname (var.structName.,'extern','headerfile',headerfile指定要使用的C结构类型var.有名称structName.并在外部文件中定义,headerfileName

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

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

例子

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

您无法使用此语法MATLAB函数块。

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

您无法使用此语法MATLAB函数块。

outtype.= coder.cstructName(intypestructName.,'extern','headerfile',headerfile“对齐”,对齐创建一个类型对象outtype.这也指定了C结构类型对齐。

您无法使用此语法MATLAB函数块。

例子

全部折叠

在Matlab功能中,myfun.,指定名称mystruct.对于变量的生成的C结构类型v

功能y = myfun ()%#codegen.v =结构('一种',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 ()%#codegen.v =结构('一种',1,'B'结构('F'3));coder.cstructname (v,“myStruct”);Coder.cstructName(V.B,“mysubStruct”);y = v;结束

生成的C结构类型mysubstruct.是:

Typedef struct {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.函数的迈尔卡德这需要一个类型的参数mycstruct.定义的类型mycstruct在头文件中。

#define mycad_h typedef struct {double f1; / /定义mycad_h双f2;} mycstruct;双mycadd (mycstruct * s);# endif

写C函数mycadd.c.

#include  #include  #include“mycadd.h”双重mycadd(mycstruct * s){return s-> f1 + s-> f2;}

写一个matlab函数mymAdd通过引用传递结构迈尔卡德.使用Coder.cstructName.要指定在生成的代码中,结构具有C类型mycstruct,它定义在mycadd.h.

功能y = mymAdd%#codegen.s = struct(“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(s,“myStruct”);Codegen.配置:自由myFunctionarg游戏T1.

输入参数

全部折叠

在生成的代码中表示为结构的MATLAB结构或单元阵列变量。

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

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

指定文件的路径。

  • 使用Codegen.-一世选项或选项附加包括目录参数在MATLAB编码器™应用程序设置自定义代码标签。

  • 为一个MATLAB函数块,模拟目标代码生成>自定义代码窗格,在其他构建信息,设置包括目录范围。

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

例子:'mystruct.h'

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

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

限制

  • 你不能申请Coder.cstructName.直接指向全局变量。要命名要与全局变量一起使用的结构类型,请使用Coder.cstructName.创建名称结构类型的类型对象。然后,当你运行时Codegen.,指定全局变量具有该类型。看到将C结构类型命名为全局结构变量使用

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

提示

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

  • 使用Coder.cstructName.在结构上,数组设置基本元素的结构类型的名称,而不是数组的名称。因此,您不能申请Coder.cstructName.到结构阵列元素,然后用不同的C结构类型名称将其应用于阵列。例如,不允许使用以下代码。第二Coder.cstructName.尝试将基本类型的名称设置为myStructArrayName,与以前指定的名称冲突,mystructname.

    %定义标量结构与字段astruct myStruct = ('一种',0);Coder.cstructName(MyStruct,'mystructname');%定义了与字段a的结构数组myStructArray = repmat (myStruct 4 6);coder.cstructname (myStructArray'mystructarrayname');

  • 申请Coder.cstructName.对结构数组的一个元素进行应用时,会产生与apply相同的结果Coder.cstructName.到整个结构阵列。如果你申请Coder.cstructName.对于结构阵列的一个元素,您必须使用单个下标引用元素。例如,您可以使用var (1), 但不是var(1,1).申请Coder.cstructName.var(:)产生与申请相同的结果Coder.cstructName.var.或者var(n)

  • 异构电池阵列被表示为所生成的代码中的结构。以下是使用的考虑因素Coder.cstructName.细胞数组:

    • 在生成代码的函数中,使用Coder.cstructName.通过单元阵列变量使单元阵列异质化。因此,如果单元格阵列是入口点函数输入,其类型是永久性的,则无法使用Coder.cstructName.用细胞阵列。

    • 使用Coder.cstructName.有一个同质的Coder.celltype.对象intype使返回的物体异构。因此,你不能使用Coder.cstructName.永久均匀的Coder.celltype.目的。有关Cell array永久性均匀的信息,请参阅信息在命令行指定单元格阵列输入

    • 与a一起使用时Coder.celltype.目的,Coder.cstructName.创造一个Coder.celltype.永久异构的对象。

  • 当您使用命名的结构时Coder.cstructName.在具有行 - 主要和列主要数组布局的项目中,代码生成器在某些情况下重命名结构,追加排_或者col到结构名称的开头。这种重命名为这两种数组布局中使用的类型提供了唯一的类型定义。

  • 这些技巧只适用于MATLAB函数块:

    • MATLAB函数块输入和输出结构与总线信号相关联。为结构类型生成的名称来自总线信号名称。不要使用Coder.cstructName.命名用于输入或输出信号的结构类型。看到在MATLAB功能块中创建结构(金宝app模型)。

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

介绍了R2011a