Когда вы генерируете код из кода MATLAB®, который содержит массивы ячеек, генератор кода классифицирует массивы ячеек как homogeneous или heterogeneous. Эта классификация определяет, как массив ячеек представлен в сгенерированном коде. Это также определяет, как можно использовать массив ячеек в коде MATLAB, из которого вы генерируете код.
Когда вы используете массивы ячеек в коде MATLAB, который предназначается для генерации кода, необходимо придерживаться определенных ограничений. Смотрите Ограничения Массива ячеек для Генерации кода.
Гомогенный массив ячеек имеет эти характеристики:
Массив ячеек представлен как массив в сгенерированном коде.
Все элементы имеют те же свойства. Тип, сопоставленный с массивом ячеек, задает свойства всех элементов, а не свойства отдельных элементов.
Массив ячеек может быть переменным размером.
Можно индексировать в массив ячеек с индексом, значение которого определяется во время выполнения.
Неоднородный массив ячеек имеет эти характеристики:
Массив ячеек представлен как структура в сгенерированном коде. Каждый элемент представлен как поле структуры.
Элементы могут иметь различные свойства. Тип, сопоставленный с массивом ячеек, задает свойства каждого элемента индивидуально.
Массив ячеек не может быть переменным размером.
Необходимо индексировать в массив ячеек с постоянным индексом или с for
- циклы, которые имеют постоянные границы.
Генератор кода использует эвристику, чтобы определить классификацию массива ячеек как гомогенную или неоднородную. Это рассматривает свойства (класс, размер, сложность) элементов и других факторов, такой как, как вы используете массив ячеек в своей программе. В зависимости от того, как вы используете массив ячеек, генератор кода может классифицировать массив ячеек как гомогенный в одном случае и неоднородный в другом случае. Например, считайте массив ячеек {1 [2 3]}
. Генератор кода может классифицировать этот массив ячеек как неоднородное 1 2 массив ячеек. Первый элемент удваивает скаляр. Второй элемент 1 2, массив удваивается. Однако, если вы индексируете в этот массив ячеек с индексом, значение которого определяется во время выполнения, генератор кода классифицирует его как гомогенный массив ячеек. Элементы являются массивами переменного размера, удваивается с верхней границей 2.
Для массивов ячеек с определенными характеристиками вы не можете управлять классификацией как гомогенной или неоднородной:
Если элементы имеют различные классы, массив ячеек должен быть неоднородным.
Если массив ячеек является переменным размером, это должно быть гомогенно.
Если вы индексируете в массив ячеек с индексом, значение которого определяется во время выполнения, массив ячеек должен быть гомогенным.
Для других массивов ячеек можно управлять классификацией как гомогенной или неоднородной.
Чтобы управлять классификацией массивов ячеек, которые являются входными параметрами функции точки входа:
В командной строке используйте методы coder.CellType
makeHomogeneous
или makeHeterogeneous
.
В приложении MATLAB Coder™ выберите cell (Homogeneous) или cell (Heterogeneous) из меню типа. Смотрите Задают или Входной Тип Параметра Редактирования при помощи Приложения.
Чтобы управлять классификацией массивов ячеек, которые не являются входными параметрами функции точки входа:
Если массив ячеек является фиксированным размером, можно обеспечить в противном случае гомогенный массив ячеек, чтобы быть неоднородными при помощи coder.cstructname
. Например:
function y = mycell() %#codegen c = {1 2 3}; coder.cstructname(c, 'myname'); y = c; end
Если элементы массива ячеек имеют тот же класс, можно обеспечить массив ячеек, чтобы быть гомогенными при помощи coder.varsize
. Смотрите Управление, Является ли Массив ячеек Переменным Размером.
Генератор кода представляет неоднородный массив ячеек как структуру в сгенерированном коде. Можно назвать сгенерированный тип структуры. Вы не можете назвать поля структуры.
Если массив ячеек является входным параметром функции точки входа, смотрите, Задают Входные параметры Массива ячеек. Если массив ячеек не является входным параметром функции точки входа, используйте coder.cstructname
в функции MATLAB. Например:
function y = mycell() %#codegen c = {1 'a'}; coder.cstructname(c, 'myname'); y = c; end
Чтобы видеть, является ли массив ячеек гомогенным или неоднородным, просмотрите переменную в отчете генерации кода.
Для гомогенного массива ячеек отчет имеет одну запись, которая задает свойства всех элементов. {:}
обозначения указывает, что все элементы массива ячеек имеют те же свойства.
Для неоднородного массива ячеек отчет имеет запись для каждого элемента. Например, для неоднородного массива ячеек c
с двумя элементами, запись для c{1}
показывает свойства для первого элемента. Запись для c{2}
показывает свойства для второго элемента.
coder.CellType
| coder.cstructname
| coder.varsize