Пакет: кодер
Объявите массив переменного размера
coder.varsize (
'var1'
, 'var2'
...)
coder.varsize ('var1'
, 'var2'
..., ubound
)
coder.varsize ('var1'
, 'var2'
..., ubound
, dims
)
coder.varsize ('var1'
, 'var2'
..., [], dims
)
объявляет одну или несколько переменных как данные переменного размера, позволяя последующим присвоениям расширить их размер. Каждый coder.varsize('var1', 'var2', ...)
'varn'
является именем переменной или поля структуры, заключенного в кавычки. Если поле структуры принадлежит массиву структур, используйте двоеточие (:
) в качестве индексного выражения, чтобы сделать полевой переменный размер для всех элементов массива. Например, выражение, coder.varsize('data(:).A')
объявляет, что поле A
в каждом элементе data
переменное измеренный.
объявляет одну или несколько переменных как данные переменного размера с явной верхней границей, заданной в coder.varsize('var1', 'var2', ..., ubound)
ubound
. Аргумент ubound
должен быть постоянным, вектором с целочисленным знаком размеров верхней границы для каждой размерности каждого 'varn'
. Если вы задаете больше чем один 'varn'
, каждая переменная должна иметь то же количество размерностей.
объявляет одну или несколько переменных как переменный размер с явной верхней границей и соединением фиксированных и переменных размерностей, заданных в coder.varsize('var1', 'var2', ..., ubound, dims)
dims
. Аргумент dims
является логическим вектором или двойным вектором, содержащим только нули и единицы. Размерности, которые соответствуют нулям или false
в dims
, имеют фиксированный размер; размерности, которые соответствуют единицам или true
, отличаются по размеру. Если вы задаете больше чем одну переменную, каждая фиксированная размерность должна иметь то же значение через весь 'varn'
.
объявляет одну или несколько переменных как переменный размер с соединением фиксированных и переменных размерностей. coder.varsize('var1', 'var2', ..., [], dims)
[]
пустого вектора означает, что вы не задаете явную верхнюю границу.
Когда вы не задаете ubound
, верхняя граница вычисляется для каждого 'varn'
в сгенерированном коде.
Когда вы не задаете dims
, размерности приняты, чтобы быть переменными кроме одноэлементных единиц. Одноэлементная размерность является размерностью для который size
(A,dim)
= 1.
Необходимо добавить объявление coder.varsize
, прежде чем каждый 'varn'
будет использоваться (чтение). Можно добавить объявление перед первым присвоением на каждый 'varn'
. Однако для элемента массива ячеек, объявление coder.varsize
должно следовать за первым присвоением на элемент. Например:
... x = cell(3, 3); x{1} = [1 2]; coder.varsize('x{1}'); ...
Вы не можете использовать coder.varsize
вне кода MATLAB®, предназначенного для генерации кода. Например, следующий код не объявляет переменную, var
, как данные переменного размера:
coder.varsize('var',10); codegen -config:lib MyFile -args var
Вместо этого включайте оператор coder.varsize
в MyFile
, чтобы объявить var
как данные переменного размера.
При использовании функцию cell, чтобы создать массив cell
, вы не можете использовать coder.varsize
с тем массивом ячеек.
При использовании coder.varsize
с элементом массива ячеек, объявление coder.varsize
должно следовать за первым присвоением на элемент. Например:
... x = cell(3, 3); x{1} = [1 2]; coder.varsize('x{1}'); ...
Вы не можете использовать coder.varsize
с глобальными переменными.
Вы не можете использовать coder.varsize
со свойствами класса MATLAB.
Вы не можете использовать coder.varsize
со скалярами строки.
Для разреженных матриц coder.varsize
пропускает верхние границы для размерностей переменного размера.
Меры coder.varsize
размер одноэлементной размерности, если аргумент dims
явным образом не указывает, что одноэлементная размерность имеет переменный размер.
Например, следующий код указывает, что v
имеет размер 1:10. Первая размерность (одноэлементная размерность) имеет фиксированный размер. Второе измерение имеет переменный размер.
coder.varsize('v', [1 10])
v
имеет размер:1-by-:10. Обе размерности имеют переменный размер.coder.varsize('v',[1,10],[1,1])
Для блока MATLAB function одноэлементные размерности сигналов ввода или вывода не могут иметь переменного размера.
При использовании входные переменные (или результат вычисления с помощью входных переменных), чтобы задать размер массива, это объявляется как переменный размер в сгенерированном коде. Не используйте coder.varsize
на массиве снова, если вы также не хотите задать верхнюю границу для ее размера.
Используя coder.varsize
на массиве без явных верхних границ вызывает динамическое выделение памяти массива. Это динамическое выделение памяти может уменьшить скорость сгенерированного кода. Чтобы избежать динамического выделения памяти, используйте синтаксис
, чтобы задать верхнюю границу для размера массивов (если вы знаете это заранее).coder.varsize('var1', 'var2', ..., ubound)
Массив ячеек может быть переменным размером, только если это гомогенно. Когда вы используете coder.varsize
с массивом ячеек, генератор кода пытается сделать массив ячеек гомогенным. Это пытается найти класс и размер, которые применяются ко всем элементам массива ячеек. Например, если первый элемент является двойным, и второй элемент 1x2 дважды, все элементы могут быть представлены как 1x:2 дважды. Если генератор кода не может найти общий класс и размер, сбои генерации кода. Например, предположите, что первый элемент массива ячеек является char, и второй элемент является двойным. Генератор кода не может найти класс, который может представлять оба элемента.