我正在尝试在 Matlab 中构建一个串口设备。我有 2 个设备“COM1”和“COM2”。“COM1”异步将数据写入串行端口“COM2”。我有“COM1”和“COM2”的替代名称,如下所示:
global serialcom
serialcom=serial('COM1'); %Serial Communication portal COM 1
global testdummy
testdummy=serial('COM2'); %Serial Communication portal COM 2
触发 testdummy 函数的testdummy的输入缓冲区中的字节数为 2,这是使用 testdummy.BytesAvailableFcnCount 字段(如下)指定的。
testdummy.BytesAvailableFcnMode = 'Byte';
testdummy.BytesAvailableFcnCount = 2;
testdummy.BytesAvailableFcn = @testdummycomfunction;
我在testdummy端有一个函数“testdummyfunction” ,它是使用 Matlab 中的 BytesAvailable 回调属性触发的。这个函数的结构如下:
function testdummyfunction(testdummy,BytesAvailable)
% TESTDUMMYFUNCTION(testdummy,...BytesAvailable)
% INPUTS:
% TESTDUMMY:refers to the serial port testdummy
% BYTESAVAILABLE:Refers to the callback function 'BytesAvailablefunction'
global serialcom;
data_string=fscanf(serialcom,'%c',2); %Reads the data sent form serialcom
end
现在,假设我打印到 testdummy 的字符串大于 2 个字节,比如 10 个字节。由于我将数据异步写入 testdummy,因此第一次触发可用字节功能时,会从中读取 2 个字节。(这 2 个字节对我来说就像一个同步字节,如果它们正确,则意味着我可以读取其余部分)。
现在,我想将 testdummy.BytesAvailableFcnCount 属性更改为 8;这样我就可以读取剩余的 8 个字节。但是,Matlab 说我必须先关闭串口才能更改 testdummy.BytesAvailableFcnCount 属性。如果我这样做,那么我输入缓冲区中的所有内容都会丢失!我如何仍然确保我更改属性并且不会丢失输入缓冲区中的数据?