主要内容

coder.cstructname

名字C结构类型生成的代码

描述

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

例子

coder.cstructname (var,structName)名称为MATLAB生成的C结构类型变量var。输入var可以是一个结构或一个细胞数组。在一个函数中使用这个语法的生成代码。的地方coder.cstructname后的定义var在第一次使用之前var。如果var是一个入口点(顶级)函数输入参数,coder.cstructname初的功能,在任何控制流语句之前。

例子

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

可以使用“外来的”没有指定头文件选项。然而,这是一个最佳实践来指定头文件代码生成器生成的# include声明在正确的位置。

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

例子

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

你不能使用这个语法MATLAB函数块。

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

你不能使用这个语法MATLAB函数块。

outtype= coder.cstructname (intype,structName“外来的”,“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{双一个;双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 struct{双f;}mysubStruct;

生成的C结构类型myStruct是:

typedef struct{双一个;mysubStruct b;}myStruct;

在MATLAB函数,myfun2,指定名称myStruct生成的C单元阵列结构类型c

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

生成的C结构类型c是:

typedef struct{双f1;双f2;双f3;}myStruct;

指定一个结构传递给一个C函数有一个C头文件中定义结构类型。

创建一个C头文件mycadd.h函数的mycadd这需要一个参数类型mycstruct。定义的类型mycstruct在头文件中。

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

编写的C函数mycadd.c

# include < stdio。h > # include < stdlib。h > # include " mycadd。h“双重mycadd (mycstruct * s){返回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结构类型使用一个全局结构变量

  • 单元阵列输入的字段名称必须定义的外部结构f1,f2,等等。

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

提示

  • 信息如何代码生成器决定了结构的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.cstructnamevarvar (n)

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

    • 在一个函数的生成代码,使用coder.cstructname与细胞数组变量使细胞异构数组。因此,如果一个单元阵列是一个入口点函数的输入及其类型永远是均匀的,那么你不能使用coder.cstructname单元阵列。

    • 使用coder.cstructname用均匀coder.CellType对象intype返回的对象不同。因此,您不能使用coder.cstructname与一个永久的均匀coder.CellType对象。当一个单元阵列信息永远是均匀的,明白了在命令行中指定单元阵列的输入

    • 当使用一个coder.CellType对象,coder.cstructname创建一个coder.CellType对象永久异构。

  • 当你使用结构命名的coder.cstructname项目中的行和列为主的阵列布局,代码生成器重命名结构在某些情况下,附加row_col_结构的开始的名字。这个重命名提供了独特的类型定义中使用的类型两个阵列布局。

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

    • MATLAB函数块的输入和输出结构与总线信号相关联。生成的结构类型的名称来自总线信号名称。不要使用coder.cstructname名字输入或输出信号的结构类型。看到创建结构MATLAB函数块(万博1manbetx模型)

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

介绍了R2011a