Задайте верхние границы для массива, когда:
Динамическое выделение памяти отключено.
Если динамическое выделение памяти отключено, необходимо задать верхние границы для всех массивов.
Вы не хотите, чтобы генератор кода использовал динамическое выделение памяти для массива.
Задайте верхние границы, которые приводят к размеру массива (в байтах), который меньше, чем динамический порог выделения памяти.
Эта команда задает, что вход для работы foo
является матрицей вещественных двойников с двумя переменными размерностями. Верхняя граница для первой размерности равна 3. Верхняя граница для второго измерения равна 100.
Чтобы задать верхние границы для входов переменного размера, используйте coder.typeof
создайте с помощью fiaccel
-args
опция. Для примера:
fiaccel foo -args {coder.typeof(fi(0),[3 100],1)}
foo
является матрицей fi
типы с двумя переменными размерностями. Верхняя граница для первой размерности равна 3. Верхняя граница для второго измерения равна 100. При использовании статического распределения генератор кода использует сложный анализ, чтобы вычислить верхние границы локальных данных. Однако, когда анализу не удается обнаружить верхнюю границу или вычисляет верхнюю границу, которая недостаточно точна для вашего приложения, необходимо явно задать верхние границы для локальных переменных.
Чтобы ограничить значение переменных, которые задают размерности массивов переменного размера, используйте 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.