exponenta event banner

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

При создании кода из кода MATLAB ®, содержащего массивы ячеек, генератор кода классифицирует массивы ячеек как однородные или гетерогенные. Эта классификация определяет способ представления массива ячеек в сгенерированном коде. Он также определяет способ использования массива ячеек в коде MATLAB, из которого создается код.

При использовании массивов ячеек в коде MATLAB, предназначенном для создания кода, необходимо соблюдать определенные ограничения. См. раздел Ограничения массива ячеек для создания кода.

Однородные и гетерогенные массивы клеток

Однородная клеточная матрица имеет следующие характеристики:

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

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

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

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

Гетерогенный клеточный массив имеет следующие характеристики:

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

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

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

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

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

См. также

| |

Связанные темы