Постоянная переменная является локальной переменной в MATLAB® функция, которая сохраняет свое значение в памяти между вызовами функции. Для генерации кода функции должны инициализировать постоянную переменную, если она пуста. Для получения дополнительной информации см. persistent
.
При программировании функций MATLAB в таких ситуациях:
MATLAB Function блоки без прямого сквозного соединения
MATLAB Function блоки в моделях, которые содержат State Control блока в Synchronous
способ
Функции MATLAB в Stateflow® графики, которые реализуют семантику машины Мура
Специализированная семантика влияет на то, как функция инициализирует свои постоянные данные. Поскольку инициализация должна быть независимой от входа в функцию, следуйте этим рекомендациям:
Функция инициализирует свои постоянные переменные только путем доступа к константам.
Поток управления функцией не зависит от того, происходит ли инициализация.
Для примера эта функция имеет постоянную переменную n
.
function y = fcn(u) persistent n if isempty(n) n = u; y = 1; return end y = n; n = n + u; end
n
зависит от входа u
и return
оператор прерывает нормальный поток управления функцией.Чтобы исправить ошибку, инициализируйте постоянную переменную, установив ее в постоянное значение и удалите return
оператор. Для примера эта функция инициализирует постоянную переменную, не создавая ошибки.
function y = fcn(u) persistent n if isempty(n) n = 1; end y = n; n = n + u; end
Эта модель содержит блок MATLAB function, который задает функцию fcn
, описанная ранее. Область входа u
- квадратная волна со значениями 1 и -1.
В блоке MATLAB function:
Начальное значение стойкой переменной n
зависит от входа u
.
The return
оператор прерывает нормальный поток управления функцией.
Поскольку флажок Разрешить прямую обратную связь снят, инициализация приводит к ошибке.
Если вы изменяете функцию, чтобы она инициализировалась n
независимо от входов, можно симулировать модель без ошибок.
Эта модель содержит блок MATLAB function, который задает функцию fcn
, описанная ранее. Область входа u
- квадратная волна со значениями 1 и -1.
В блоке MATLAB function:
Начальное значение стойкой переменной n
зависит от входа u
.
The return
оператор прерывает нормальный поток управления функцией.
Потому что модель содержит блок State Control в Synchronous
mode, инициализация приводит к ошибке.
Если вы изменяете функцию, чтобы она инициализировалась n
независимо от входов, можно симулировать модель без ошибок.
Эта модель содержит диаграмму Stateflow, которая реализует семантику машины Мура. График содержит функцию MATLAB, которая определяет функцию fcn
, описанная ранее. Область входа u
имеет значения 1 и -1, которые зависят от состояния графика.
В функции MATLAB:
Начальное значение стойкой переменной n
зависит от входа u
.
The return
оператор прерывает нормальный поток управления функцией.
Поскольку график реализует семантику Мура, инициализация приводит к ошибке.
Если вы изменяете функцию, чтобы она инициализировалась n
независимо от входов, можно симулировать модель без ошибок.
MATLAB Function | persistent
| State Control (HDL Coder) | Chart (Stateflow)