我正在使用异步串行写操作来发送数据。使用fwrite()
如果写入操作已在进行中,则无法发送数据。它返回一个错误:
Unsuccessful write: An asynchronous write is already in progress.
如何将我需要写入的额外数据添加到现有输出缓冲区,而不必等待它完成?
另外,我试图查看要输出的字节数,但它会显示完整数字(511
,默认大小)或零。所以我将输出缓冲区的大小增加到100,000
发送了那么多项并绘制了BytesToOutput
,这就是我得到的:
它从~25,000直接下降到0!?有人可以解释一下吗?
这是我的代码:
instrreset; %closes, deletes and clears all available serial objects
s=serial('/dev/ttyACM0');
s.BaudRate= 1000000;
s.Timeout= 0.1;
s.OutputBufferSize= 100000;
fopen(s);
data=[1:99999];
bytesLeft=zeros(1,100000);
disp('sending data now... wait for it to complete')
tic()
fwrite(s, data, 'uint8', 'async');
f=1;
while ( strcmp(s.TransferStatus, 'write') )
bytesLeft(f)=s.BytesToOutput;
f=f+1;
%disp(s.BytesToOutput)
end
toc()
plot(bytesLeft);
fclose(s);
delete(s);
clear s;