Генератор кода создает типы данных в C/C + +, которые соответствуют типам данных, используемым в коде MATLAB ®. Создаваемые типы данных зависят от целевой платформы и компилятора. Генератор кода может создавать встроенные типы данных C, такие какshort, long, intи т.д., или пользовательские типы данных, определенные с помощью C typedef заявления. По умолчанию генератор кода создает встроенные типы для автономного кода (lib, dll или exe) и пользовательские типы для кода MEX. Для использования встроенных типов C измените DataTypeReplacement свойство объекта конфигурации создания кода или используйте MATLAB Coder™ App. Дополнительные сведения см. в разделе Определение типов данных, используемых в сгенерированном коде.
Для создания пользовательских типов C/C + + генератор кода использует предопределенные типы данных в файле заголовкаtmwtypes.h, расположен в fullfile(matlabroot,'extern','include'). Генератор кода также может создавать пользовательские типы данных на основе анализа кода MATLAB. Пользовательские типы данных определены в файлах rtwtypes.h и myFunction_types.h находится в каталоге генерации кода. myFunction - имя функции верхнего уровня. Генератор кода не может создать код для всех типов данных, существующих в MATLAB. См. раздел Языковые функции MATLAB, поддерживаемые для генерации кода C/C + +.
Если встроенные типы данных C не используются, генератор кода создает следующие типы данных:
| Тип данных MATLAB | Соответствующий пользовательский тип данных C/C + + |
|---|---|
logical | boolean_T |
char | char_T |
string | 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 |
single | real32_T |
double | real_T |
complex | См. раздел Сложные типы. |
struct | См. раздел Типы структуры. |
fi | См. раздел Типы фиксированных точек. |
Когда переменная передается по ссылке, соответствующий пользовательский тип данных использует оператор отмены привязки. Например, соответствующий пользовательский тип данных C/C + + дляint8 при передаче по ссылке int8_T*.
Динамически назначенные массивы сопоставляются с пользовательским emxArray_ тип. Например, динамически выделенный char массив сопоставляется с типом 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 |
single | creal32_T |
double | creal_T |
Генератор кода определяет каждое комплексное значение как структуру с вещественным компонентом re и мнимый компонент im. Например, см. typedef для creal32_T от tmwtypes.h:
typedef struct {
real32_T re;/* Real component*/
real32_T im;/* Imaginary component*/
} creal32_T;x типа creal32_T. Созданный код обращается к вещественному компоненту как x.re и мнимый компонент как x.im.Если для библиотеки C/C + + требуется другое представление, можно определить собственные версии комплексных типов кодера MATLAB, например, с помощью coder.cstructname. Однако необходимо использовать имена re для реальных компонентов и im для мнимых компонентов в определениях.
Дополнительные сведения см. в разделе Создание кода для сложных данных.
Кодер MATLAB отображает структуры в типы C/C + + по полю. Порядок полей структуры в определении MATLAB сохраняется. Для управления именем созданного типа структуры C/C + + или предоставления определения используйте coder.cstructname функция. Если динамическое выделение памяти не используется, массивы в структурах преобразуются в одномерные массивы, а не указатели. Дополнительные сведения см. в разделе Структуры.
numerictype свойства 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 Coder отображает векторы символов MATLAB в массивы символов C/C + +. Эти символьные массивы не являются строками C/C + +, поскольку не являются пустыми. При передаче вектора символов MATLAB внешнему коду C/C + +, который ожидает строку C/C + +, генерируемый массив символов C/C + + должен заканчиваться нулем. Чтобы создать символьный массив C/C + + с нулевым окончанием, добавьте ноль к концу символьного вектора MATLAB. Например,['sample text' 0]. В противном случае созданный код, который ожидает строку, может перестать работать без ошибок компилятора или предупреждений.
Многословные типы - это пользовательские типы, которые создаются, когда целевое оборудование не может хранить тип данных MATLAB во встроенном типе C/C + +. Многословные типы создаются как структурные типы C/C + +, содержащие массив целых чисел. Размеры массива зависят от размера самого широкого целого типа на целевом оборудовании.
Например, для 128-битного типа с фиксированной точкой, если самый широкий целочисленный тип на целевом оборудовании - 32 бита, программное обеспечение генерирует структуру с массивом из четырёх 32-битных целых чисел.
typedef struct
{
unsigned int chunks[4];
} uint128m_T;Если самым широким целым типом на целевом оборудовании является long с размером 64 бита генератор кода формирует структуру с массивом из двух 64-разрядных длинных типов.
typedef struct
{
unsigned long chunks[2];
} uint128m_T;Тип данных C/C + +, сгенерированный из 64-разрядного целого типа MATLAB, зависит от размеров целочисленных типов на целевом оборудовании. Если встроенный тип, достаточно широкий для хранения 64-разрядных данных, не существует, то 64-разрядный тип кодера MATLAB сопоставляется с пользовательским многословным типом.
coder.cstructname | coder.opaque