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

См. также

Объекты

Похожие примеры

Подробнее о

Для просмотра документации необходимо авторизоваться на сайте