Генерация кода для Массивов ячеек

Когда вы генерируете код из кода MATLAB®, который содержит массивы ячеек, генератор кода классифицирует массивы ячеек как homogeneous или heterogeneous. Эта классификация определяет, как массив ячеек представлен в сгенерированном коде. Это также определяет, как можно использовать массив ячеек в коде MATLAB, из которого вы генерируете код.

Когда вы используете массивы ячеек в коде MATLAB, который предназначается для генерации кода, необходимо придерживаться определенных ограничений. Смотрите Ограничения Массива ячеек для Генерации кода.

Гомогенный по сравнению с неоднородными Массивами ячеек

Гомогенный массив ячеек имеет эти характеристики:

  • Массив ячеек представлен как массив в сгенерированном коде.

  • Все элементы имеют те же свойства. Тип, сопоставленный с массивом ячеек, задает свойства всех элементов, а не свойства отдельных элементов.

  • Массив ячеек может быть переменным размером.

  • Можно индексировать в массив ячеек с индексом, значение которого определяется во время выполнения.

Неоднородный массив ячеек имеет эти характеристики:

  • Массив ячеек представлен как структура в сгенерированном коде. Каждый элемент представлен как поле структуры.

  • Элементы могут иметь различные свойства. Тип, сопоставленный с массивом ячеек, задает свойства каждого элемента индивидуально.

  • Массив ячеек не может быть переменным размером.

  • Необходимо индексировать в массив ячеек с постоянным индексом или с for- циклы, которые имеют постоянные границы.

Генератор кода использует эвристику, чтобы определить классификацию массива ячеек как гомогенную или неоднородную. Это рассматривает свойства (класс, размер, сложность) элементов и других факторов, такой как, как вы используете массив ячеек в своей программе. В зависимости от того, как вы используете массив ячеек, генератор кода может классифицировать массив ячеек как гомогенный в одном случае и неоднородный в другом случае. Например, считайте массив ячеек {1 [2 3]}. Генератор кода может классифицировать этот массив ячеек как неоднородное 1 2 массив ячеек. Первый элемент удваивает скаляр. Второй элемент 1 2 массив типа double. Однако, если вы индексируете в этот массив ячеек с индексом, значение которого определяется во время выполнения, генератор кода классифицирует его как гомогенный массив ячеек. Элементами являются массивы типа double переменного размера с верхней границей 2.

Управление, является ли массив ячеек гомогенным или неоднородным

Для массивов ячеек с определенными характеристиками вы не можете управлять классификацией как гомогенной или неоднородной:

  • Если элементы имеют различные классы, массив ячеек должен быть неоднородным.

  • Если массив ячеек является переменным размером, это должно быть гомогенно.

  • Если вы индексируете в массив ячеек с индексом, значение которого определяется во время выполнения, массив ячеек должен быть гомогенным.

Для других массивов ячеек можно управлять классификацией как гомогенной или неоднородной.

Чтобы управлять классификацией массивов ячеек, которые являются входными параметрами функции точки входа:

Чтобы управлять классификацией массивов ячеек, которые не являются входными параметрами функции точки входа:

  • Если массив ячеек является фиксированным размером, можно обеспечить в противном случае гомогенный массив ячеек, чтобы быть неоднородными при помощи 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} показывает свойства для второго элемента.

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

| |

Похожие темы