Отображение типов 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См. «Фиксированные точки».

Когда переменная передается по ссылке, соответствующий пользовательский тип данных использует оператор dereference. Например, соответствующий пользовательский тип данных 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, например, при помощи coder.cstructname. Однако необходимо использовать имена re для реальных компонентов и im для мнимых компонентов в ваших определениях.

Для получения дополнительной информации смотрите Генерация кода для комплексных данных.

Типы структур

MATLAB Coder отображает структуры на типы C/C + + по полям. Порядок полей структуры в определении MATLAB сохраняется. Чтобы управлять именем сгенерированного типа структуры C/C + + или предоставить определение, используйте coder.cstructname функция. Если вы не используете динамическое выделение памяти, массивы в структурах переводятся в одномерные массивы, а не в указатели. Для получения дополнительной информации см. раздел Структуры.

Фиксированные точки

The 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 Coder преобразуется в пользовательский тип с несколькими словами.

См. также

|

Похожие темы