Я думаю, вы можете использовать здесь вложенную функцию, которая действует как «замыкание»! Создайте переменную для использования в качестве буфера за пределами вашей функции, а затем укажите / присвойте ее внутри вложенной функции DatagramReceivedFcn
.
Чтобы это работало, весь остальной код должен быть в функциисам по себе.
function DoTheThing
%% Specify a Server (host name or IP address) with Port 8080
u = udp('192.168.0.164', 8080); %UDP Object
% Here's your buffer in the enclosing function
myBuffer = {};
u.InputBufferSize = 1024;
u.ReadAsyncMode = 'continuous';
u.DatagramReceivedFcn = @DatagramReceivedFcn;
% [...]
%% Start Data transmission by trigger
fprintf(u, 'Requesting Data')
%% Callback Function
function DatagramReceivedFcn(u,~)
%avail = u.BytesAvailable;
datagram = fscanf(u);
disp('Data Received!');
disp(datagram);
myBuffer{end+1} = datagram; % References myBuffer in the enclosing function!
end
end
И, вероятно, было бы более читабельным, если бы вы переместили функцию обратного вызова вверх, чтобы быть рядом с инициализацией myBuffer
.