matlab 缓冲区,matlab - matlab bytesAvailableCallback带有空缓冲区 - 堆栈内存溢出

在MATLAB中使用BytesAvailableFcn处理UDP通讯时,遇到一个问题:当缓冲区为空时,回调依然被多次调用。这可能导致不必要的性能消耗。文章通过示例展示了问题的具体表现,并询问是否存在解决方法来避免空回调的调用。
摘要由CSDN通过智能技术生成

在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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值