在matlab中打开任何通讯工具时,可以使用BytesAvailableFcn设置对象。 即u.BytesAvailableFcn = @bytesAvailable_callback;
每次调用回调时,它将完全清除缓冲区。 例如,对于udp客户端:
function bytesAvailable_callback(udp_obj, event)
bytesAvailable = get(udp_obj, 'BytesAvailable');
fprintf('callback - bytesAvailable = %d\n',bytesAvailable);
while bytesAvailable
data = fread(udp_obj, bytesAvailable, 'int32');
fprintf('rec = %d\n',data(1));
bytesAvailable = get(udp_obj, 'BytesAvailable');
end
end
接下来发生的问题是问题:缓冲区已被清除,但BytesAvailableFcn仍在调用堆栈中,将被调用很多次,仅不返回任何内容。
使用udp运行上述回调的示例:
clc
echoudp('on', 8000)
%
u = udp('127.0.0.1', 8000);
u.OutputBufferSize = 10000;
u.InputBufferSize = 10000;
u.Byt