文档

映射MATLAB类型到生成代码中的类型

代码生成器生成C/ c++中的数据类型,与您在MATLAB中使用的数据类型相对应®代码。生成的数据类型取决于目标平台和编译器。代码生成器可以生成内置的C数据类型,例如int,等等,或者使用C类型定义语句。默认情况下,代码生成器为独立代码(lib、dll或exe)生成内置类型,为MEX代码生成自定义类型。要使用内置的C类型,请修改DataTypeReplacement属性或使用MATLAB编码器™有关更多信息,请参见指定生成代码中使用的数据类型

为了生成定制的C/ c++类型,代码生成器在头文件中使用预定义的数据类型tmwtypes.h,位于fullfile (matlabroot“外来的”,“包括”).代码生成器还可以基于对MATLAB代码的分析生成自定义数据类型。自定义数据类型在文件中定义rtwtypes.hmyFunction_types.h位于代码生成目录中。myFunction是顶级函数的名称。代码生成器不能为MATLAB中存在的每一种数据类型生成代码。看到支持C/ c++代码生成的MATLAB语言特性万博1manbetx

当你不使用内置的C数据类型时,代码生成器会生成以下数据类型:

MATLAB数据类型 对应的自定义C/ c++数据类型
逻辑 boolean_T
字符 char_T
字符串 rtString
int8 int8_T
int16 int16_T
int32 int32_T
int64 int64_T
uint8 uint8_T
uint16 uint16_T
uint32 uint32_T
uint64 uint64_T
real32_T
real_T
复杂的 看到复杂类型
结构体 看到结构类型
fi 看到定点类型

当通过引用传递变量时,相应的自定义数据类型使用解引用操作符。例如,对应的自定义C/ c++数据类型int8当通过引用传递时int8_T *

动态分配的数组映射到自定义数组emxArray_类型。例如,动态分配字符数组映射到类型emxArray_char_T.动态分配的双数组映射到该类型emxArray_real_T.例如,当在编译时不知道数组大小时,或者通过使用coder.varsize无需明确指定上界。有关可变大小数组的更多信息,请参见C代码数组接口

复杂类型

在MATLAB中,复杂性被定义为数据类型的属性。该表列出了代码生成器用于MATLAB复杂数据类型的预定义数据类型。

MATLAB复杂数据类型 对应的自定义C/ c++数据类型
int8 cint8_T
int16 cint16_T
int32 cint32_T
int64 cint64_T
uint8 cuint8_T
uint16 cuint16_T
uint32 cuint32_T
uint64 cuint64_T
creal32_T
creal_T

代码生成器将每个复杂值定义为带有实际组件的结构再保险和虚分量即时通讯.例如,请参见类型定义creal32_Ttmwtypes.h

typedef struct {real32_T re;/*实组件*/ real32_T im;/*虚组件*/}creal32_T;
假设你定义了一个变量x类型的creal32_T.生成的代码访问真实的组件x.re虚分量是x.im

如果你的C/ c++库需要不同的表示,你可以定义你自己的版本MATLAB编码器例如,通过使用coder.cstructname.然而,你必须使用的名称再保险对于实分量和即时通讯对于定义中的虚分量。

有关更多信息,请参见复杂数据的代码生成

结构类型

MATLAB编码器逐个字段地将结构映射到C/ c++类型。在MATLAB定义中,结构字段的顺序被保留下来。要控制生成的C/ c++结构类型的名称,或提供定义,请使用coder.cstructname函数。如果不使用动态内存分配,结构中的数组会转换为一维数组,而不是指针。有关更多信息,请参见结构

定点类型

numerictype的属性fi对象确定其C/ c++数据类型。默认情况下,代码生成器尝试使用内置的C/ c++类型。但是,您可以选择使用定制的C/ c++数据类型。下表显示了如何Signedness,FractionLength属性决定自定义的C/ c++数据类型。自定义C/ c++数据类型是下一个更大的目标单词大小,它可以根据单词长度存储定点值。整数类型的符号与定点类型的符号匹配。

Signedness 字长 部分长度 对应的自定义C/ c++数据类型
1 8 7 int8_T
1 13 10 int16_T
1 16 15 int16_T
0 19 15 uint32_T

特征向量

MATLAB编码器软件将MATLAB字符向量映射到C/ c++字符数组。这些字符数组不是C/ c++字符串,因为它们不是以空结尾的。如果将MATLAB字符向量传递给需要C/ c++字符串的外部C/ c++代码,则生成的C/ c++字符数组必须以null结尾。要生成以null结尾的C/ c++字符数组,请在MATLAB字符向量的末尾添加一个0。例如,['示例文本' 0].否则,生成的期望字符串的代码将在没有编译器错误或警告的情况下停止工作。

多字类型

多字类型是自定义类型,当目标硬件不能将MATLAB数据类型存储在内置的C/ c++类型时生成。多字类型生成为包含整型数组的C/ c++结构类型。数组的维数取决于目标硬件上最宽的整数类型的大小。

例如,对于128位的定点类型,如果目标硬件上最宽的整数类型是32位的,则软件生成一个包含4个32位整数数组的结构。

Typedef struct{无符号int块[4];} uint128m_T;

如果目标硬件上最宽的整数类型是对于64位的大小,代码生成器将生成一个具有两个64位长类型数组的结构。

Typedef struct{无符号长块[2];} uint128m_T;

由64位整数MATLAB类型生成的C/ c++数据类型取决于目标硬件上整数类型的大小。如果没有足够宽的内置类型来存储64位,则64位MATLAB编码器类型映射到自定义多字类型。

另请参阅

|

相关的话题

这个话题有用吗?