Персистентная переменная является локальной переменной в функции 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
.
return
оператор прерывает нормальный поток управления функции.
Поскольку Позволение прямого проходного флажка очищено, результаты инициализации по ошибке.
Если вы изменяете функцию, таким образом, она инициализирует n
независимо от входа затем можно симулировать безошибочную модель.
Эта модель содержит блок MATLAB function, который задает функциональный fcn
, описанный ранее. Вход u
прямоугольная волна со значениями 1 и-1.
В блоке MATLAB function:
Начальное значение персистентной переменной n
зависит от входа u
.
return
оператор прерывает нормальный поток управления функции.
Поскольку модель содержит блок State Control в Synchronous
режим, инициализация приводит к ошибке.
Если вы изменяете функцию, таким образом, она инициализирует n
независимо от входа затем можно симулировать безошибочную модель.
Эта модель содержит диаграмму Stateflow, которая реализует семантику машины Мура. График содержит функцию MATLAB, которая задает функциональный fcn
, описанный ранее. Вход u
имеет значения 1 и-1, которые зависят от состояния графика.
В функции MATLAB:
Начальное значение персистентной переменной n
зависит от входа u
.
return
оператор прерывает нормальный поток управления функции.
Поскольку график реализует семантику Мура, результаты инициализации по ошибке.
Если вы изменяете функцию, таким образом, она инициализирует n
независимо от входа затем можно симулировать безошибочную модель.
Chart | persistent
| State Control (HDL Coder) | MATLAB Function (Simulink)