Структура имени C вводит в сгенерированном коде
coder.cstructname
называет сгенерированный или внешне заданный тип структуры C, чтобы использовать для переменных MATLAB®, которые представлены как структуры в сгенерированном коде.
coder.cstructname(var,structName)
coder.cstructname(var,structName,'extern','HeaderFile',headerfile)
coder.cstructname(var,structName,'extern','HeaderFile',headerfile,'Alignment',alignment)
outtype = coder.cstructname(intype,structName)
outtype = coder.cstructname(intype,structName,'extern','HeaderFile',headerfile)
outtype = coder.cstructname(intype,structName,'extern','HeaderFile',headerfile,'Alignment',alignment)
называет тип структуры C сгенерированным для переменной MATLAB coder.cstructname(var,structName)
var
. Входной параметр var
может быть структурой или массивом ячеек. Используйте этот синтаксис в функции, от которой вы генерируете код. Поместите coder.cstructname
после определения var
и перед первым использованием var
. Если var
является точкой входа (верхний уровень) аргумент входного параметра функции, место coder.cstructname
в начале функции, перед какими-либо операторами управления.
указывает, что тип структуры C, чтобы использовать для coder.cstructname(var,structName,'extern','HeaderFile',headerfile)
var
имеет имя structName
и задан во внешнем файле, headerfileName
.
Возможно использовать опцию 'extern'
, не задавая заголовочный файл. Однако это - лучшая практика задать заголовочный файл так, чтобы генератор кода произвел оператор #include
в правильном месте.
также указывает, что выравнивание памяти во время выполнения для внешне заданной структуры вводит coder.cstructname(var,structName,'extern','HeaderFile',headerfile,'Alignment',alignment)
structName
. Если вы Встроили Coder® и пользуетесь Заменяющими Библиотеками пользовательского кода (CRLs), задаете выравнивание так, чтобы генератор кода мог совпадать с функциями CRL, которые требуют выравнивания для структур. Смотрите Выравнивание Данных для Замены Кода (Embedded Coder).
возвращает массив структур или текстовый объект массива ячеек outtype = coder.cstructname(intype,structName)
outtype
, который задает имя типа структуры C, чтобы сгенерировать. coder.cstructname
создает outtype
со свойствами входного типа intype
. Затем это устанавливает свойство TypeName
на structName
. Используйте этот синтаксис, чтобы создать текстовый объект, который вы используете с
опцией -args
codegen
. Вы не можете использовать этот синтаксис в функции, от которой вы генерируете код.
Вы не можете использовать этот синтаксис в блоке MATLAB function.
возвращает текстовый объект outtype = coder.cstructname(intype,structName,'extern','HeaderFile',headerfile)
outtype
, который задает название и местоположение внешне заданного типа структуры C. Генератор кода использует внешне заданный тип структуры для переменных с типом outtype
.
Вы не можете использовать этот синтаксис в блоке MATLAB function.
Вы не можете применить coder.cstructname
непосредственно к глобальной переменной. Чтобы назвать тип структуры, чтобы использовать с глобальной переменной, используйте coder.cstructname
, чтобы создать текстовый объект, который называет тип структуры. Затем когда вы запускаете codegen
, указываете, что глобальная переменная имеет тот тип. Смотрите Имя Тип Структуры C, чтобы Использовать С Глобальной Переменной Структуры.
Для входных параметров массива ячеек именами полей внешне заданных структур должен быть f1
, f2
, и так далее.
Для получения информации о том, как генератор кода определяет типы C/C++ полей структуры, смотрите Отображение Типы MATLAB к Типам в Сгенерированном коде.
Используя coder.cstructname
на массиве структур определяет имя типа структуры основного элемента, не имя массива. Поэтому вы не можете применить coder.cstructname
к элементу массива структур, и затем применить его к массиву с различным именем типа структуры C. Например, следующий код не позволен. Второй coder.cstructname
пытается определить имя базового типа к myStructArrayName
, который конфликтует с ранее указанным именем, myStructName
.
% Define scalar structure with field a myStruct = struct('a', 0); coder.cstructname(myStruct,'myStructName'); % Define array of structure with field a myStructArray = repmat(myStruct,k,n); coder.cstructname(myStructArray,'myStructArrayName');
Применение coder.cstructname
к элементу массива структур приводит к тому же результату как применение coder.cstructname
к целому массиву структур. Если вы применяете coder.cstructname
к элементу массива структур, необходимо обратиться к элементу при помощи единственного индекса. Например, можно использовать var(1)
, но не var(1,1)
. Применение coder.cstructname
к var(:)
приводит к тому же результату как применение coder.cstructname
к var
или var(n)
.
Неоднородные массивы ячеек представлены как структуры в сгенерированном коде. Вот факторы для использования coder.cstructname
с массивами ячеек:
В функции, от которой вы генерируете код, с помощью coder.cstructname
с переменной массива ячеек, делает массив ячеек неоднородным. Поэтому, если массив ячеек является входным параметром функции точки входа, и его тип является постоянно гомогенным, то вы не можете использовать coder.cstructname
с массивом ячеек.
Используя coder.cstructname
с гомогенным объектом coder.CellType
intype
делает возвращенный объект неоднородным. Поэтому вы не можете использовать coder.cstructname
с постоянно гомогенным объектом coder.CellType
. Для получения информации о том, когда массив ячеек является постоянно гомогенным, смотрите, Задают Вводы Массива ячеек в Командной строке.
Когда используется с объектом coder.CellType
, coder.cstructname
создает объект coder.CellType
, который постоянно неоднороден.
Когда вы используете структуру, названную coder.cstructname
в проекте с размещениями главного строкой и главного массива столбца, генератор кода переименовывает структуру в определенных случаях, добавляя row_
или col_
к началу имени структуры. Это переименование предоставляет уникальные определения типа для типов, которые используются в обоих размещениях массивов.
Эти советы применяются только к блокам MATLAB function:
Структуры ввода и вывода блока MATLAB function сопоставлены с сигналами шины. Сгенерированное название для типа структуры происходит от имени сигнала шины. Не используйте coder.cstructname
, чтобы назвать тип структуры для сигналов ввода или вывода. Смотрите Создают Структуры в блоках MATLAB function (Simulink).
Генератор кода производит имена типов структуры согласно правилам именования идентификатора, даже если вы называете тип структуры с coder.cstructname
. Если у вас есть Embedded Coder, можно настроить правила именования. Смотрите Конструкцию Сгенерированных Идентификаторов (Embedded Coder).