1

所以我的 Arduino 花了将近 200 毫秒来处理总共 128 个字节。整个过程不写串口只需要25ms。为什么我的 Arduino 遇到这么多瓶颈?

阿杜诺

setColor只是使用 FastLED 库设置 ledstrip 的颜色。

void loop() {
  if(Serial.available() == 4){
    int led = Serial.read();
    int r = Serial.read();
    int g = Serial.read();
    int b = Serial.read();

    setColor(led, r, g, b);
    Serial.write(1);

    if(Serial.available() > 0) Serial.read();
  }
}

C#

在一个循环中,我正在执行以下操作来写入数据:

attempt:
if (Port.isReady) {
  strip.Send(new byte[] { id, c.R, c.G, c.B });
  Port.isReady = false;
} else {
    goto attempt;
}
public void Send(byte[] bytes) {
  port.Write(bytes, 0, bytes.Length);
}

我使用以下方法阅读了 Arduino 响应:

private const int DONE = 1;
public void SerialPortDataReceived(object sender, SerialDataReceivedEventArgs e) {
    Console.WriteLine("- Serial port data received -");
    Console.WriteLine("Nr. of bytes: {0}", port.BytesToRead);
    if (port.ReadByte() == DONE) {
        isReady = true;
    }
    port.DiscardInBuffer();
}
4

1 回答 1

2

那么这一切都取决于你的波特率。如果您的波特率为 9600,则每秒可以接收 9600 位,即 1200 字节。

所以 128/1200 = 0.1066 = 107 ms 花费在接收 128 个字节上。

更高的波特率会缩短读取时间。


那么为什么你会问它需要 200 毫秒?

我的猜测是,这是因为对setColor() You 的多次调用每 4 个字节调用一次,所以是 32 次。我不知道该函数的执行时间,但如果它是 2-3 毫秒,那么你会很快达到 200 毫秒。

于 2017-03-26T20:10:18.280 回答