exponenta event banner

Почему 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}

См. также

Объекты

Связанные примеры

Подробнее