dsp.AsyncBuffer Ошибка объекта при вызове read Прежде write?В dsp.AsyncBuffer Системный object™, необходимо инициализировать буфер перед первым вызовом read способ. Для инициализации буфера вызовите write или setup способ.
Рассмотрим bufferWrapper функция, которая записывает и считывает данные из асинхронного буфера. Когда вход cmd имеет значение true, объект записывает данные в буфер. Когда cmd является falseобъект считывает данные из буфера.
function [y,isData] = bufferWrapper(u,cmd) persistent asyncBuff if isempty(asyncBuff) asyncBuff = dsp.AsyncBuffer; end if cmd % write write(asyncBuff,u); y = zeros(128,1); isData = false; else % read isData = true; y = read(asyncBuff,128,64); end
Вызовите буфер с помощью cmd установить в значение false.
bufferWrapper(1,false);
Ошибка функции со следующим сообщением:
Buffer not initialized. You must call write before read.
При создании кода из этой функции объект выдает ошибку, что буфер 'Cache' не определен.
codegen bufferWrapper -args {1,false}
??? Property 'Cache' is undefined on some execution paths but is used inside the called function.
Оба этих сообщения об ошибках указывают на то, что буфер не инициализирован при первом вызове read в одном из путей выполнения.
Чтобы устранить эти ошибки, позвоните write или setup перед первым звонком на read. Если вы звоните setup, назовите его только один раз в начале, во время построения буфера.
В этой функции setup вызывается до read.
function [y,isData] = bufferWrapper_setup(u,cmd) persistent asyncBuff if isempty(asyncBuff) asyncBuff = dsp.AsyncBuffer; setup(asyncBuff,u); end if cmd % write write(asyncBuff,u); y = zeros(128,1); isData = false; else % read isData = true; y = read(asyncBuff,128,64); end
Теперь можно считывать буфер без ошибок.
bufferWrapper_setup(1,false);
После создания кода из этой функции файл MEX будет успешно создан, поскольку кэш определен для всех путей выполнения.
codegen bufferWrapper_setup -args {1,false}