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}