代码生成器生成C/ c++中的数据类型,与您在MATLAB中使用的数据类型相对应®代码。生成的数据类型取决于目标平台和编译器。代码生成器可以生成内置的C数据类型,例如短的
那长
那int
,等等,或者使用C类型定义
陈述。默认情况下,代码生成器会为MEX代码的独立代码(lib,dll或exe)和自定义类型生成内置类型。要使用内置C类型,请修改数据表倒置
属性或使用Matlab Coder™有关更多信息,请参见指定生成代码中使用的数据类型.
要生成自定义C / C ++类型,代码生成器在头文件中使用预定义的数据类型tmwtypes.h.
,位于fullfile (matlabroot“外来的”,“包括”)
.代码生成器还可以根据MATLAB代码的分析生成自定义数据类型。自定义数据类型在文件中定义RTWTYPES.H.
和myfunction_types.h.
位于代码生成目录中。myfunction.
是您的顶级功能的名称。代码生成器无法为MATLAB中存在的每个数据类型生成代码。看支持C/ c++代码生成的MATLAB语言特性金宝app.
当您不使用内置的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. |
看定点类型. |
当通过引用传递变量时,相应的自定义数据类型使用Dereference Operator。例如,相应的自定义C / C ++数据类型INT8.
当通过引用传递时INT8_T *
.
动态分配的数组映射到自定义数组emxArray_
类型。例如,动态分配字符
数组地图到一种类型emxArray_char_T
.一个动态分配的双数组映射到类型emxArray_real_T
.例如,当数组大小在编译时或使用时创建变量大小阵列时,发生动态分配编码器.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_T
从tmwtypes.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
a的属性FI.
对象确定其C / C ++数据类型。默认情况下,代码生成器尝试使用内置C / C ++类型。但是,您可以选择使用自定义C / C ++数据类型。下表显示了如何Signedness
那WordLength.
,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 {unsigned int块[4];uint128m_t;
如果目标硬件上最宽的整数类型是长
尺寸为64位,代码生成器会产生具有两个64位长类型的数组的结构。
Typedef struct{无符号长块[2];uint128m_t;
从64位整数MATLAB类型生成的C / C ++数据类型取决于目标硬件上整数类型的大小。如果一个内置类型足够存储64位,则不存在64位Matlab编码器类型映射到自定义多字类型。
coder.cstructname
|coder.opaque