A persistent variable is a local variable in a MATLAB® function that retains its value in memory between calls to the function. For
code generation, functions must initialize a persistent variable if it is empty. For more
information, see persistent
.
When programming MATLAB functions in these situations:
MATLAB Function blocks with no direct feedthrough
MATLAB
Function blocks in models that contain State Control (HDL Coder) blocks in
Synchronous
mode
MATLAB functions in Stateflow charts (Stateflow) that implement Moore machine semantics
The specialized semantics impact how a function initializes its persistent data. Because the initialization must be independent of the input to the function, follow these guidelines:
The function initializes its persistent variables only by accessing constants.
The control flow of the function does not depend on whether the initialization occurs.
For example, this function has a persistent variable
n
.
function y = fcn(u) persistent n if isempty(n) n = u; y = 1; return end y = n; n = n + u; end
n
depends on the input u
and the return
statement
interrupts the normal control flow of the function.To correct the error, initialize the persistent variable by setting it to a constant value
and remove the return
statement. For example, this function initializes
the persistent variable without producing an error.
function y = fcn(u) persistent n if isempty(n) n = 1; end y = n; n = n + u; end
This model contains a MATLAB function block that defines the function fcn
, described previously. The input u
is a square wave with values of 1 and -1.
In the MATLAB function block:
The initial value of the persistent variable n
depends on the input u
.
The return
statement interrupts the normal control flow of the function.
Because the Allow direct feedthrough check box is cleared, the initialization results in an error.
If you modify the function so it initializes n
independently of the input, then you can simulate an error-free model.
This model contains a MATLAB function block that defines the function fcn
, described previously. The input u
is a square wave with values of 1 and -1.
In the MATLAB function block:
The initial value of the persistent variable n
depends on the input u
.
The return
statement interrupts the normal control flow of the function.
Because the model contains a State Control block in Synchronous
mode, the initialization results in an error.
If you modify the function so it initializes n
independently of the input, then you can simulate an error-free model.
This model contains a Stateflow chart that implements Moore machine semantics. The chart contains a MATLAB function that defines the function fcn
, described previously. The input u
has values of 1 and -1 that depend on the state of the chart.
In the MATLAB function:
The initial value of the persistent variable n
depends on the input u
.
The return
statement interrupts the normal control flow of the function.
Because the chart implements Moore semantics, the initialization results in an error.
If you modify the function so it initializes n
independently of the input, then you can simulate an error-free model.
MATLAB Function | persistent
| State Control (HDL Coder) | Chart (Stateflow)