Инициализируйте персистентные переменные в функциях MATLAB

Персистентная переменная является локальной переменной в функции MATLAB®, которая сохраняет ее значение в памяти между вызовами функции. Для генерации кода функции должны инициализировать персистентную переменную, если это пусто. Для получения дополнительной информации смотрите persistent.

При программировании функций MATLAB в этих ситуациях:

  • MATLAB Function blocks без прямого сквозного соединения

  • Function blocks MATLAB в моделях, которые содержат State Control (HDL Coder) блоки в Synchronous режим

  • Функции MATLAB в Stateflow charts, которые реализуют семантику машины Мура

Специализированная семантика влияет, как функция инициализирует свои персистентные данные. Поскольку инициализация должна быть независима от входа к функции, следовать этим инструкциям:

  • Функция инициализирует свои персистентные переменные только путем доступа к константам.

  • Поток управления функции не зависит от того, происходит ли инициализация.

Например, эта функция имеет персистентную переменную 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 без прямого сквозного соединения

Эта модель содержит блок 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, реализующая семантику Мура

Эта модель содержит диаграмму Stateflow, которая реализует семантику машины Мура. График содержит функцию MATLAB, которая задает функциональный fcn, описанный ранее. Вход u имеет значения 1 и-1, которые зависят от состояния графика.

В функции MATLAB:

  • Начальное значение персистентной переменной n зависит от входа u.

  • return оператор прерывает нормальный поток управления функции.

Поскольку график реализует семантику Мура, результаты инициализации по ошибке.

Если вы изменяете функцию, таким образом, она инициализирует n независимо от входа затем можно симулировать безошибочную модель.

Смотрите также

| | | (HDL Coder)

Похожие темы