Когда вы генерируете код из MATLAB® код, который содержит массивы ячеек, генератор кода классифицирует массивы ячеек как homogeneous или heterogeneous. Эта классификация определяет, как массив ячеек представлен в сгенерированном коде. Это также определяет, как можно использовать массив ячеек в коде MATLAB, из которого вы генерируете код.
Когда вы используете массивы ячеек в коде MATLAB, который предназначен для генерации кода, вы должны придерживаться определенных ограничений. Смотрите Ограничения массива ячеек для Генерации кода.
Однородный массив ячеек имеет следующие характеристики:
Массив ячеек представлен как массив в сгенерированном коде.
Все элементы имеют одинаковые свойства. Тип, сопоставленный с массивом ячеек, задает свойства всех элементов, а не свойства отдельных элементов.
Массив ячеек может быть переменного размера.
Можно индексировать в массив ячеек индекс, значение которого определяется во время выполнения.
Гетерогенный массив ячеек имеет следующие характеристики:
Массив ячеек представлен как структура в сгенерированном коде. Каждый элемент представлен как поле структуры.
Элементы могут иметь различные свойства. Тип, сопоставленный с массивом ячеек, задает свойства каждого элемента по отдельности.
Массив ячеек не может быть переменным размером.
Вы должны индексировать в массив ячеек с постоянным индексом или с for
- циклы с постоянными границами.
Генератор кода использует эвристику, чтобы определить классификацию массива ячеек как однородную или неоднородную. Он рассматривает свойства (класс, размер, сложность) элементов и других факторов, таких как то, как использование массива ячеек в вашей программе. В зависимости от того, как вы используете массив ячеек, генератор кода может классифицировать массив ячеек как однородный в одном случае и неоднородный в другом случае. Например, рассмотрим массив ячеек {1 [2 3]}
. Генератор кода может классифицировать этот массив ячеек как гетерогенный массив ячеек 1 на 2. Первый элемент является двойным скаляром. Второй элемент является массивом типа double 1 на 2. Однако, если вы индексируете в этот массив ячеек индекс, значение которого определяется во время исполнения, генератор кода классифицирует его как однородный массив ячеек. Элементы являются массивами типа double переменного размера с верхней границей 2.
Для массивов ячеек с определенными характеристиками вы не можете управлять классификацией как однородной или неоднородной:
Если элементы имеют различные классы, массив ячеек должен быть неоднородным.
Если массив ячеек имеет переменный размер, он должен быть однородным.
Если вы индексируете в массив ячеек индекс, значение которого определяется во время выполнения, массив ячеек должен быть однородным.
Для других массивов ячеек можно управлять классификацией как однородной или неоднородной.
Чтобы управлять классификацией массивов ячеек, которые являются входными параметрами функции точки входа:
В командной строке используйте coder.CellType
методы makeHomogeneous
и makeHeterogeneous
.
В приложении MATLAB Coder™ выберите в меню type 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