Задайте верхние границы для массива когда:
Динамическое выделение памяти отключено.
Если динамическое выделение памяти отключено, необходимо задать верхние границы для всех массивов.
Вы не хотите, чтобы генератор кода использовал динамическое выделение памяти для массива.
Задайте верхние границы, которые приводят к размеру массивов (в байтах), который является меньше, чем порог динамического выделения памяти.
Если вы генерируете код при помощи codegen
, чтобы задать верхние границы для входных параметров переменного размера, используйте построение coder.typeof
с опцией -args
. Например:
codegen foo -args {coder.typeof(double(0),[3 100],1)}
Эта команда указывает, что входной параметр, чтобы функционировать foo
является матрицей действительных, удваивается с двумя переменными размерностями. Верхняя граница для первой размерности равняется 3. Верхняя граница для второго измерения равняется 100.
Если вы генерируете код при помощи приложения MATLAB® Coder™, смотрите Specify Properties Входных параметров функции Точки входа Используя Приложение и Сделайте Переменный Размер Размерностей, Когда Они Соответствуют Порогу Размера.
При использовании статического выделения генератор кода использует сложный анализ, чтобы вычислить верхние границы локальных данных. Однако, когда анализ не удается обнаружить верхнюю границу или вычисляет верхнюю границу, которая не достаточно точна для вашего приложения, необходимо задать верхние границы явным образом для локальных переменных.
Чтобы ограничить значение переменных, которые задают размерности массивов переменного размера, используйте функцию assert
с операторами отношения. Например:
function y = dim_need_bound(n) %#codegen assert (n <= 5); L= ones(n,n); M = zeros(n,n); M = [L; M]; y = M;
Этот оператор assert
ограничивает, вводит n
к максимальному размеру 5. L
является переменным размером с верхними границами 5 в каждой размерности. M
является переменным размером с верхней границей 10 в первой размерности и 5 во втором измерении.
Чтобы задать верхние границы для всех экземпляров локальной переменной в функции, используйте функцию coder.varsize
. Например:
function Y = example_bounds1(u) %#codegen Y = [1 2 3 4 5]; coder.varsize('Y',[1 10]); if (u > 0) Y = [Y Y+u]; else Y = [Y Y*u]; end
Второй аргумент coder.varsize
задает верхнюю границу для каждого экземпляра переменной, заданной в первом аргументе. В этом примере аргумент [1 10]
указывает что для каждого экземпляра Y
:
Первая размерность фиксируется в размере 1.
Второе измерение может вырасти до верхней границы 10.