exponenta event banner

Сопоставление типов MATLAB типам в сгенерированном коде

Генератор кода создает типы данных в 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 + +
logicalboolean_T
charchar_T
stringrtString
int8int8_T
int16int16_T
int32int32_T
int64int64_T
uint8uint8_T
uint16uint16_T
uint32uint32_T
uint64uint64_T
singlereal32_T
doublereal_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 + +
int8cint8_T
int16cint16_T
int32cint32_T
int64cint64_T
uint8cuint8_T
uint16cuint16_T
uint32cuint32_T
uint64cuint64_T
singlecreal32_T
doublecreal_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 + +
187int8_T
1 1310int16_T
11615int16_T
01915uint32_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 сопоставляется с пользовательским многословным типом.

См. также

|

Связанные темы