串行异步写入:如何将数据添加到输出缓冲区&奇怪的输出缓冲行为

时间:2016-12-19 12:13:41

标签: matlab serial-port

我正在使用异步串行写操作来发送数据。使用fwrite()如果写入操作已在进行中,则无法发送数据。它返回一个错误:

Unsuccessful write: An asynchronous write is already in progress.

如何将我需要写入的额外数据添加到现有输出缓冲区,而不必等待它完成?

另外,我试图查看要输出的字节数,但它会显示完整数字(511,默认大小)或零。所以我将输出缓冲区的大小增加到100,000发送了那么多项并绘制了BytesToOutput,这就是我得到的:

enter image description here

它从~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;

0 个答案:

没有答案