Когда выход алгоритма не меняется для какого-либо входа, заданного алгоритму, анализатор рассматривает алгоритм без состояния, даже если он содержит состояния. Убедитесь, что входы в алгоритм оказывают немедленный эффект на выход алгоритма.
Функция Input_Output
использует конечную импульсную характеристику, который содержит состояния.
function [output] = Input_Output(input) persistent Filter if isempty(Filter) Filter = dsp.FIRFilter('Numerator', (1:12)); end y = Filter(input); output = any(y(:)>0); end
Когда вы вызываете автоматическое обнаружение длины состояния этой функции, анализатор обнаруживает минимальную длину состояния 0
.
dspunfold Input_Output -args {randn(10,1)} -s auto -f true
Analyzing input MATLAB function Input_Output Creating single-threaded MEX file Input_Output_st.mexw64 Searching for minimal state length (this might take a while) Checking stateless ... Sufficient Minimal state length is 0 Creating multi-threaded MEX file Input_Output_mt.mexw64 Creating analyzer file Input_Output_analyzer
Анализатор обнаруживает нулевую длину состояния, потому что выход функции одинаковый независимо от значения входа. Когда анализатор проверяет алгоритм с нулевой длиной состояния, выходы многопоточного MEX и однопоточного MEX совпадают. Поэтому анализатор рассматривает алгоритм без гражданства и устанавливает минимальную длину состояния в нуль.
Чтобы предотвратить выбор анализатором неправильной длины состояния, перепишите алгоритм так, чтобы входы оказали немедленный эффект на выход. Кроме того, выберите входы, которые подчеркивают путь кода с максимальной длиной состояния.
Лучшие практики см. в разделе 'Советы' dspunfold
.