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' isundefined.
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}