Отображение типов MATLAB к типам в сгенерированном коде

Генератор кода производит типы данных на C/C++, которые соответствуют типам данных, которые вы используете в своем коде MATLAB®. Типы данных, которые сгенерированы, зависят от целевой платформы и компилятора. Генератор кода может произвести любой встроенные типы данных C, такие как short, long, int, и так далее, или пользовательские типы данных заданы при помощи typedef C операторы. По умолчанию генератор кода производит встроенные типы для автономного кода (lib, dll, или exe) и пользовательские типы для кода MEX. Чтобы использовать встроенные типы C, измените DataTypeReplacement свойство настройки генерации кода возражает или использует Приложение MATLAB Coder™. Для получения дополнительной информации смотрите, Задают Типы данных, Используемые в Сгенерированном коде.

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

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

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

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

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

numerictype свойства fi объект определяет свой тип данных C/C++. По умолчанию генератор кода пытается использовать встроенные типы C/C++. Однако можно принять решение использовать пользовательские типы данных C/C++ вместо этого. Следующая таблица показывает как Signedness, WordLength, и FractionLength свойства определяют пользовательский тип данных C/C++. Пользовательский тип данных C/C++ является следующим большим целевым размером слова, который может сохранить значение фиксированной точки, на основе его размера слова. Знак целочисленного типа совпадает со знаком фиксированной точки.

Со знакомРазмер словаДробная длинаСоответствующий Пользовательский Тип данных 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 сопоставляет с пользовательским типом многословным.

Смотрите также

|

Похожие темы