【发布时间】:2013-07-17 13:12:34
【问题描述】:
我正在尝试在 Matlab 中构建一个串口设备。我有 2 个设备“COM1”和“COM2”。 'COM1' ASYNCHROUNOUSLY 将数据写入串行端口 '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 属性。如果我这样做,那么我输入缓冲区中的所有内容都会丢失! 我如何仍然确保我更改属性并且不会丢失输入缓冲区中的数据?
【问题讨论】:
-
先用fread从串口读取数据?
标签: matlab file-io serial-port communication serial-communication