arduino / ArduinoCore-sam

80 stars 107 forks source link

CDC boolean operator speed issue #106

Open DesperateProgrammer opened 4 years ago

DesperateProgrammer commented 4 years ago

While looking for a slow USB CDC connection (~30-40kB/s) I found that there is an artifical delay in the boolean operator: https://github.com/arduino/ArduinoCore-sam/blob/c893c62ec9953ed36a256b5243272fda2e473c14/cores/arduino/USB/CDC.cpp#L314

I can not find a reasoning for this delay. Removing it from the source greatly improved USB Speed for me to about 140kB/s

void setup() {
  // put your setup code here, to run once:
  SerialUSB.begin(2000000) ;
}

byte buffer[512] ;

void loop() {

#if 1
  int pos = 0 ;
  if (!SerialUSB)
    return ;
  while (SerialUSB.available())
  {
    if (pos >= sizeof(buffer))
      return ;
    buffer[pos++] = SerialUSB.read();
  }
  if (pos)
    SerialUSB.write(buffer, pos);
  return ;
#endif
}

Does anyone know the reasoning behind this delay?

Thanks in advance, Tim