coder.cstructname

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

描述

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

可以使用'EXTERN'选项,而不指定头文件。但是,最佳实践是指定头文件,以便代码生成器生成# include声明在正确的位置。

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

例子

outtype= coder.cstructname(intype,structName)返回结构或细胞阵列型对象outtype指定的C结构类型的名称来生成。coder.cstructname创建outtype与输入类型的属性intype。然后,它设置类型名财产structName。使用此语法来创建一个类型的对象,你与使用代码生成arg游戏选择。不能在生成代码的函数中使用此语法。

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

outtype= coder.cstructname(intype,structName, 'EXTERN', 'HeaderFile',headerfile)返回一个类型的对象outtype指定名称和外部定义的C结构类型的位置。代码生成器使用外部定义的结构类型与类型变量outtype

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

outtype= coder.cstructname(intype,structName, 'EXTERN', 'HeaderFile',headerfile“对齐”,对齐)创建一个类型的对象outtype还指定C结构类型的对准。

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

例子

全部折叠

在MATLAB功能,myfun,分配名称MYSTRUCT到所生成的C结构类型为可变v

功能y = myfun ()%#代码生成v =结构('一个'1,'B',2);coder.cstructname (v,'MYSTRUCT');Y = V;结束

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

代码生成-config:LIBmyfun-报告

查看生成的结构类型,开代码生成/ LIB / myfun / myfun_types.h或查看myfun_types.h在代码生成报告中。生成的C结构类型为:

struct {double a;双B;} myStruct;

在MATLAB功能,myfun1,分配名称MYSTRUCT为该结构生成的C结构类型v。指定名称mysubStruct到为子结构生成的结构类型v.b

功能y = myfun ()%#代码生成v =结构('一个'1,'B',结构('F'3));coder.cstructname (v,'MYSTRUCT');coder.cstructname(五.B,“mysubStruct”);Y = V;结束

生成的C结构类型mysubStruct是:

typedef struct {double f;} mysubStruct;

生成的C结构类型MYSTRUCT是:

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结构{双F1;双f2;} mycstruct;双mycadd(mycstruct * S);#万一

编写C函数mycadd.c

的#include 中的#include 中的#include “mycadd.h” 双mycadd(mycstruct * S){返回S-> F1 + S-> F2;}

写功能的MATLABmymAdd通过参照通过的结构mycadd。使用coder.cstructname以指定在生成的代码,该结构具有C类型mycstruct,其在被定义mycadd.h

功能y = mymAdd%#代码生成S =结构('F1'1,'F2',2);coder.cstructname(S,“mycstruct”,'EXTERN',“HeaderFile”,'mycadd.h');y = 0;y = coder.ceval ('mycadd'coder.ref (s));

生成函数一个C静态库mymAdd

代码生成-config:LIBmymAddmycadd.c
将所生成的报头文件mymadd_types.h不包含结构的定义mycstruct因为mycstruct是外部类型。

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

  1. 限定的示例结构年代

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

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

    • 具有的特性T

    • 名生成的C结构类型MYSTRUCT

  4. 传递类型代码生成通过使用arg游戏选择。

例如:

S =结构('一个'、双(0)'B'单(0));T = coder.typeof(S);T1 = coder.cstructname(T,'MYSTRUCT');代码生成-config:LIBmyFunctionarg游戏T1

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

S =结构('一个'、双(0)'B'单(0));T1 = coder.cstructname(年代,'MYSTRUCT');代码生成-config:LIBmyFunctionarg游戏T1

输入参数

全部折叠

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

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

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

要指定文件路径:

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

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

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

例:'mystruct.h'

用于产生或外部定义的结构的运行时存储器的对准。

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

限制

  • 你可以不适用coder.cstructname直接指向全局变量。若要为要与全局变量一起使用的结构类型命名,请使用coder.cstructname创建一个类型的对象名称的结构类型。然后,当你运行代码生成,指定全局变量有型。看到命名的C语言结构类型使用带有全局结构变量

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

提示

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

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

    %定义与字段的标结构struct myStruct = ('一个',0);coder.cstructname(MYSTRUCT,'myStructName');%定义与字段的结构的阵列myStructArray = repmat (myStruct 4 6);coder.cstructname (myStructArray'myStructArrayName');

  • 应用coder.cstructname生成与应用相同的结果coder.cstructname到整个结构阵列。如果你申请coder.cstructname到结构数组的一个元素,则必须通过使用单个标指的是元件。例如,你可以使用var (1), 但不是VAR(1,1)。应用coder.cstructnameVAR(:)产生相同的结果作为应用coder.cstructnameVAR要么VAR(N)

  • 异构单元阵列被表示为在生成的代码结构。下面是使用的注意事项coder.cstructname与单元阵列:

    • 在功能从中生成代码,使用coder.cstructname与单元阵列变量使得单元阵列异质的。因此,如果一个单元阵列是一个入口点函数的输入和它的类型是永久均匀的,则可以不使用coder.cstructname与单元阵列。

    • 使用coder.cstructname用均质coder.CellType对象intype使得返回的对象异质的。因此,你不能使用coder.cstructname具有永久齐次的coder.CellType目的。有关在一个单元阵列是永久均匀信息,请参见在命令行指定单元格数组输入

    • 当与使用coder.CellType目的,coder.cstructname创建coder.CellType对象,它是永久地异质的。

  • 当您使用一个名为结构coder.cstructname与行主和列优先阵列布局的一个项目,该码发生器重命名结构在某些情况下,附加行_要么col_到结构名称的开头。此重命名为这两个数组布局中使用的类型提供了唯一的类型定义。

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

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

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

介绍了R2011a