2017-06-12 100 views
0

我想读取来自我的Arduino的大量数据,我已将输入缓冲区设置为500000,以确保它可以处理所有这些数据。我的数据是4个传感器读数,每个采样频率为250 Hz。使用默认的缓冲区大小(712),当我实时绘制读数并且样本变得混乱并且使情节变得疯狂时,我曾经遇到过困难。我通过将缓冲区大小增加到50000来解决这个问题。但是现在,这会运行一段时间,但如果我想运行它15分钟,5分钟后我会得到相同的错误行为,并且绘图速度会变慢。我确实有一些处理代码以及现场绘图,但它不应该像这样使用双缓冲区。我想知道缓冲区是否将包含从开始到满的所有数据,或者是否会在旧数据满时继续清除旧数据(知道我已经将它保存在另一个矢量中并绘制它)。我真的不明白为什么这会继续发生。串行输入缓冲区大小Matlab

亲切的问候 I.H

+0

“_I确实有一些处理代码,与现场绘图一样,但它不应该像这样有这么大的buffer_”。缓冲区的大小不会影响处理速度。如果你对一块数据的处理比需要到达的数据块长得多...那么即使是无限的缓冲器也不会停止数据到达和它们的显示之间的逐渐失步。 – Hoki

回答

0

当缓冲区满,一旦你得到它擦除旧数据新数据。您看到的行为是因为您的处理和绘图比数据流更慢。

  • 尽量确保您优化您处理
  • 确保用于绘制由“的DrawNow”来完成。像这样,你确定如果队列中有任何东西,它不会被执行
  • 尽量避免保存并保留所有数据
  • 如果问题仍然存在,可以尝试实现一个计时器以确保你是一致的阅读你的数据
+0

如何在程序使用缓冲区时擦除数据?在文档中,刷新缓冲区会清除所有数据。我确定仍然会有一些新的数据,当我刷新它时,我还没有读取,这意味着数据丢失.....我正在使用drawnow并更新每70个样本的绘图以便更快处理。另一个信号处理部分可能很耗时,但那是因为我正在进行繁重的处理......最后,计时器应该如何判断我是否一致? – Isra

+1

如果您正在读取串行端口,则一旦读取,数据将被删除。你不需要擦除任何东西! – Laleh