Matlab:fscanf() 不会在换行处停止

Matlab: fscanf() does not stop at Line Feed

我正在尝试从类似 Arduino 的平台获取数据流到 Matlab。 我想让matlab读取15个字节的数据包,解析它们然后读取下一个块。

目前我遇到的问题是,matlab 在缓冲区满之前不会停止读取。

我在 Matlab 端的设置:

s=serial('COM25','BaudRate',115200, 'Terminator', 'LF')
fopen(s)
data=fscanf(s)

在硬件方面:

    usbMsg[0] =  0xA0;
    usbMsg[1] = _packetCounter;
    // ch1
    usbMsg[2] = in[3];
    usbMsg[3] = in[4];
    usbMsg[4] = in[5];
    // ch2
    usbMsg[5] = in[6];
    usbMsg[6] = in[7];
    usbMsg[7] = in[8];
    // ch3
    usbMsg[8] = in[9];
    usbMsg[9] = in[10];
    usbMsg[10] = in[11];
    // ch4
    usbMsg[11] = in[12];
    usbMsg[12] = in[13];
    usbMsg[13] = in[14];

    usbMsg[14] = '\n'; // LF

    SerialUSB.write(usbMsg, 15);

"usbMsg" 和 "in" 是字节数组。

fscanf() 命令不只返回一条消息,而是继续读取。显然它不识别终结符。

我尝试了不同的终结符:'LF/CR' 'CR' 'LF' 及其等效的 ASCII 没有任何成功。

谁能看出问题出在哪里?

提前致谢!

编辑:

我还有一个关于缓冲区的后续问题。 如果我将串行端口(matlab 中的串行对象)的缓冲区大小减小到仅 15 个字节并继续读取它们,这会导致数据丢失吗?

我不确定usb接口有没有缓冲区,有多大。

当您设置终止符时,它仅适用于附加到您的外发邮件的终止符。 fscanf() 将始终拉取串行连接传入缓冲区的全部内容。我建议在本地解析它。

至于解析,传入的数据很可能是一个字符数组。一次将 15 个字节传递给解析器:

for i = 1:ceil(length(data)/15)
    if length(data) >15
        toparse = data(1:15); 
        data = data(16:end); 
        parse(toparse); 
    else 
        parse(data); 
end