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

Генератор кода производит типы данных на C/C++, которые соответствуют типам данных, которые вы используете в своем коде MATLAB®. Типы данных, которые сгенерированы, зависят от целевой платформы и компилятора. Генератор кода может произвести или встроенные типы данных C, такие как short, long, int, и так далее, или пользовательские типы данных, заданные при помощи операторов C typedef. По умолчанию генератор кода производит встроенные типы для автономного кода (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++
логическийboolean_T
'char'char_T
строкаrtString
int8int8_T
int16int16_T
int32int32_T
int64int64_T
uint8uint8_T
uint16uint16_T
uint32uint32_T
uint64uint64_T
единственныйreal32_T
'double'real_T
комплексСмотрите составные типы.
struct ()Смотрите типы структуры.
fiСмотрите фиксированные точки.

Когда переменная передается ссылкой, соответствующий пользовательский тип данных использует разыменовать оператор. Например, соответствующим пользовательским типом данных C/C++ для int8, когда передано ссылкой является int8_T*.

Динамически выделенные массивы сопоставляют с пользовательским типом emxArray_. Например, динамически выделенный массив char сопоставляет с типом emxArray_char_T. Динамически выделенный двойной массив сопоставляет с типом emxArray_real_T. Динамическое выделение происходит, например, когда размер массивов не известен во время компиляции или когда вы создаете массив переменного размера при помощи coder.varsize, не задавая явные верхние границы. Для получения дополнительной информации о массивах переменного размера смотрите Интерфейс кода С для Массивов.

Составные типы

В MATLAB сложность задана как свойство типа данных. Эта таблица приводит предопределенные типы данных, которые генератор кода использует для сложных типов данных MATLAB.

Сложный тип данных MATLABСоответствующий Пользовательский Тип данных C/C++
int8cint8_T
int16cint16_T
int32cint32_T
int64cint64_T
uint8cuint8_T
uint16cuint16_T
uint32cuint32_T
uint64cuint64_T
единственныйcreal32_T
'double'creal_T

Генератор кода задает каждое комплексное значение как структуру с действительным компонентом re и мнимым компонентом im. Например, смотрите typedef для creal32_T от tmwtypes.h h:

typedef struct {
  real32_T re;/* Real component*/
  real32_T im;/* Imaginary component*/
} creal32_T;
Предположим, что вы задаете переменный x типа creal32_T. Сгенерированный код получает доступ к действительному компоненту как к x.re и мнимому компоненту как x.im \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 сопоставляет с пользовательским типом многословным.

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

|

Похожие темы

Была ли эта тема полезной?