Skip to content

Instantly share code, notes, and snippets.

@SyncChannel
Created January 30, 2016 03:15
Show Gist options
  • Select an option

  • Save SyncChannel/1e509ae9e8a34cc1e56a to your computer and use it in GitHub Desktop.

Select an option

Save SyncChannel/1e509ae9e8a34cc1e56a to your computer and use it in GitHub Desktop.

Revisions

  1. SyncChannel created this gist Jan 30, 2016.
    1,290 changes: 1,290 additions & 0 deletions Arduino_Speed_Tests.ino
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,1290 @@
    // Arduino Speed Test Benchmarking Program
    // Original Program Credit: Arduino.cc
    // Modified By: Dan Watson
    // synchannel.blogspot.com
    // 1-29-2015

    // This sketch is the speed test portion of the Arduino Show Info program
    // http://playground.arduino.cc/Main/ShowInfo

    // Certain tests may not compile/run for all boards. Comment them out as necessary:
    // * analogReference()
    // * dtostrf()
    // * bitSet()
    // * y |= (1<<x)

    // For the Arduino Zero, "Serial." needs to be "SerialUSB.". A find and replace is the easiest way
    // to fix this. The program may also run in forked IDEs (such as Mpide for the chipKIT boards).

    void setup()
    {
    Serial.begin(9600);

    pinMode(9, OUTPUT);
    pinMode(10, INPUT);

    Serial.println("Speed Test will begin momentarily.");
    Serial.println("");

    delay(4000);

    speedTest();
    }

    void loop()
    {
    // Do nothing
    }

    void speedTest(void)
    {
    register int i,j;
    volatile unsigned char c1,c2;
    volatile int v;
    volatile long l1,l2;
    volatile float f1,f2;
    int p,q;
    long int r;
    unsigned long m,n;
    float d, overhead;
    char buffer[30];

    Serial.println(F(""));
    Serial.println(F("Speed test"));
    Serial.println(F("----------"));

    Serial.print(F("F_CPU = "));
    Serial.print(F_CPU,DEC);
    Serial.println(F(" Hz"));
    Serial.print(F("1/F_CPU = "));
    Serial.print((1000000.0/(float)F_CPU),4);
    Serial.println(F(" us"));

    delay(800); // Allow the Serial text to be transmitted

    Serial.print(F(" nop : "));
    delay(70); // Allow the Serial text to be transmitted
    m=millis();
    for (i=0; i<100; i++)
    {
    for (j=0; j<10000; j++)
    {
    asm volatile ("nop");
    asm volatile ("nop");
    asm volatile ("nop");
    asm volatile ("nop");
    asm volatile ("nop");
    asm volatile ("nop");
    asm volatile ("nop");
    asm volatile ("nop");
    asm volatile ("nop");
    asm volatile ("nop");
    asm volatile ("nop");
    asm volatile ("nop");
    asm volatile ("nop");
    asm volatile ("nop");
    asm volatile ("nop");
    asm volatile ("nop");
    asm volatile ("nop");
    asm volatile ("nop");
    asm volatile ("nop");
    asm volatile ("nop");
    }
    }
    n=millis();
    d = ((float)n - (float)m) / ((float)i * (float)j);
    d *= 1000.0; // in micro seconds
    // Calculate overhead with 'nop' instruction per loop in microseconds
    overhead = d - (20.0 * (1000000.0/(float)F_CPU));
    d -= overhead;
    d /= 20.0; // per instruction
    Serial.print (d,3);
    Serial.println (F(" us"));

    Serial.print(F(" digitalRead : "));
    delay(70); // Allow the Serial text to be transmitted
    m=millis();
    for (i=0; i<2; i++)
    {
    for (j=0; j<10000; j++)
    {
    digitalRead(10);
    digitalRead(10);

    digitalRead(10);
    digitalRead(10);

    digitalRead(10);
    digitalRead(10);

    digitalRead(10);
    digitalRead(10);

    digitalRead(10);
    digitalRead(10);

    digitalRead(10);
    digitalRead(10);

    digitalRead(10);
    digitalRead(10);

    digitalRead(10);
    digitalRead(10);

    digitalRead(10);
    digitalRead(10);

    digitalRead(10);
    digitalRead(10);
    }
    }
    n=millis();
    d = ((float)n - (float)m) / ((float)i * (float)j);
    d *= 1000.0;
    d -= overhead;
    d /= 20.0;
    Serial.print (d,3);
    Serial.println (F(" us"));



    Serial.print(F(" digitalWrite : "));
    delay(70); // Allow the Serial text to be transmitted
    m=millis();
    for (i=0; i<2; i++)
    {
    for (j=0; j<10000; j++)
    {
    digitalWrite(12, HIGH);
    digitalWrite(12, LOW);

    digitalWrite(12, HIGH);
    digitalWrite(12, LOW);

    digitalWrite(12, HIGH);
    digitalWrite(12, LOW);

    digitalWrite(12, HIGH);
    digitalWrite(12, LOW);

    digitalWrite(12, HIGH);
    digitalWrite(12, LOW);

    digitalWrite(12, HIGH);
    digitalWrite(12, LOW);

    digitalWrite(12, HIGH);
    digitalWrite(12, LOW);

    digitalWrite(12, HIGH);
    digitalWrite(12, LOW);

    digitalWrite(12, HIGH);
    digitalWrite(12, LOW);

    digitalWrite(12, HIGH);
    digitalWrite(12, LOW);
    }
    }
    n=millis();
    d = ((float)n - (float)m) / ((float)i * (float)j);
    d *= 1000.0;
    d -= overhead;
    d /= 20.0;
    Serial.print (d,3);
    Serial.println (F(" us"));



    Serial.print(F(" pinMode : "));
    delay(70); // Allow the Serial text to be transmitted
    m=millis();
    for (i=0; i<2; i++)
    {
    for (j=0; j<10000; j++)
    {
    pinMode(13, INPUT);
    pinMode(13, OUTPUT);

    pinMode(13, INPUT);
    pinMode(13, OUTPUT);

    pinMode(13, INPUT);
    pinMode(13, OUTPUT);

    pinMode(13, INPUT);
    pinMode(13, OUTPUT);

    pinMode(13, INPUT);
    pinMode(13, OUTPUT);

    pinMode(13, INPUT);
    pinMode(13, OUTPUT);

    pinMode(13, INPUT);
    pinMode(13, OUTPUT);

    pinMode(13, INPUT);
    pinMode(13, OUTPUT);

    pinMode(13, INPUT);
    pinMode(13, OUTPUT);

    pinMode(13, INPUT);
    pinMode(13, OUTPUT);
    }
    }
    n=millis();
    d = ((float)n - (float)m) / ((float)i * (float)j);
    d *= 1000.0;
    d -= overhead;
    d /= 20.0;
    Serial.print (d,3);
    Serial.println (F(" us"));



    Serial.print(F(" multiply byte : "));
    c1 = 2;
    c2 = 3;
    delay(70); // Allow the Serial text to be transmitted
    m=millis();
    for (i=0; i<20; i++)
    {
    for (j=0; j<10000; j++)
    {
    c1 *= c2;
    c1 *= c2;
    c1 *= c2;
    c1 *= c2;
    c1 *= c2;
    c1 *= c2;
    c1 *= c2;
    c1 *= c2;
    c1 *= c2;
    c1 *= c2;
    c1 *= c2;
    c1 *= c2;
    c1 *= c2;
    c1 *= c2;
    c1 *= c2;
    c1 *= c2;
    c1 *= c2;
    c1 *= c2;
    c1 *= c2;
    c1 *= c2;
    }
    }
    n=millis();
    d = ((float)n - (float)m) / ((float)i * (float)j);
    d *= 1000.0;
    d -= overhead;
    d /= 20.0;
    Serial.print (d,3);
    Serial.println (F(" us"));



    Serial.print(F(" divide byte : "));
    c1 = 253;
    c2 = 3;
    delay(70); // Allow the Serial text to be transmitted
    m=millis();
    for (i=0; i<2; i++)
    {
    for (j=0; j<10000; j++)
    {
    c1 /= c2;
    c1 /= c2;
    c1 /= c2;
    c1 /= c2;
    c1 /= c2;
    c1 /= c2;
    c1 /= c2;
    c1 /= c2;
    c1 /= c2;
    c1 /= c2;
    c1 /= c2;
    c1 /= c2;
    c1 /= c2;
    c1 /= c2;
    c1 /= c2;
    c1 /= c2;
    c1 /= c2;
    c1 /= c2;
    c1 /= c2;
    c1 /= c2;
    }
    }
    n=millis();
    d = ((float)n - (float)m) / ((float)i * (float)j);
    d *= 1000.0;
    d -= overhead;
    d /= 20.0;
    Serial.print (d,3);
    Serial.println (F(" us"));



    Serial.print(F(" add byte : "));
    c1 = 1;
    c2 = 2;
    delay(70); // Allow the Serial text to be transmitted
    m=millis();
    for (i=0; i<20; i++)
    {
    for (j=0; j<10000; j++)
    {
    c1 += c2;
    c1 += c2;
    c1 += c2;
    c1 += c2;
    c1 += c2;
    c1 += c2;
    c1 += c2;
    c1 += c2;
    c1 += c2;
    c1 += c2;
    c1 += c2;
    c1 += c2;
    c1 += c2;
    c1 += c2;
    c1 += c2;
    c1 += c2;
    c1 += c2;
    c1 += c2;
    c1 += c2;
    c1 += c2;
    }
    }
    n=millis();
    d = ((float)n - (float)m) / ((float)i * (float)j);
    d *= 1000.0;
    d -= overhead;
    d /= 20.0;
    Serial.print (d,3);
    Serial.println (F(" us"));



    Serial.print(F(" multiply integer : "));
    volatile int x,y;
    x = 2;
    y = 3;
    delay(70); // Allow the Serial text to be transmitted
    m=millis();
    for (i=0; i<10; i++)
    {
    for (j=0; j<10000; j++)
    {
    x *= y;
    x *= y;
    x *= y;
    x *= y;
    x *= y;
    x *= y;
    x *= y;
    x *= y;
    x *= y;
    x *= y;
    x *= y;
    x *= y;
    x *= y;
    x *= y;
    x *= y;
    x *= y;
    x *= y;
    x *= y;
    x *= y;
    x *= y;
    }
    }
    n=millis();
    d = ((float)n - (float)m) / ((float)i * (float)j);
    d *= 1000.0;
    d -= overhead;
    d /= 20.0;
    Serial.print (d,3);
    Serial.println (F(" us"));



    Serial.print(F(" divide integer : "));
    x = 31415;
    y = 3;
    delay(70); // Allow the Serial text to be transmitted
    m=millis();
    for (i=0; i<1; i++)
    {
    for (j=0; j<10000; j++)
    {
    x /= y;
    x /= y;
    x /= y;
    x /= y;
    x /= y;
    x /= y;
    x /= y;
    x /= y;
    x /= y;
    x /= y;
    x /= y;
    x /= y;
    x /= y;
    x /= y;
    x /= y;
    x /= y;
    x /= y;
    x /= y;
    x /= y;
    x /= y;
    }
    }
    n=millis();
    d = ((float)n - (float)m) / ((float)i * (float)j);
    d *= 1000.0;
    d -= overhead;
    d /= 20.0;
    Serial.print (d,3);
    Serial.println (F(" us"));



    Serial.print(F(" add integer : "));
    x = 1;
    y = 3;
    delay(70); // Allow the Serial text to be transmitted
    m=millis();
    for (i=0; i<10; i++)
    {
    for (j=0; j<10000; j++)
    {
    x += y;
    x += y;
    x += y;
    x += y;
    x += y;
    x += y;
    x += y;
    x += y;
    x += y;
    x += y;
    x += y;
    x += y;
    x += y;
    x += y;
    x += y;
    x += y;
    x += y;
    x += y;
    x += y;
    x += y;
    }
    }
    n=millis();
    d = ((float)n - (float)m) / ((float)i * (float)j);
    d *= 1000.0;
    d -= overhead;
    d /= 20.0;
    Serial.print (d,3);
    Serial.println (F(" us"));



    Serial.print(F(" multiply long : "));
    l1 = 2;
    l2 = 3;
    delay(70); // Allow the Serial text to be transmitted
    m=millis();
    for (i=0; i<2; i++)
    {
    for (j=0; j<10000; j++)
    {
    l1 *= l2;
    l1 *= l2;
    l1 *= l2;
    l1 *= l2;
    l1 *= l2;
    l1 *= l2;
    l1 *= l2;
    l1 *= l2;
    l1 *= l2;
    l1 *= l2;
    l1 *= l2;
    l1 *= l2;
    l1 *= l2;
    l1 *= l2;
    l1 *= l2;
    l1 *= l2;
    l1 *= l2;
    l1 *= l2;
    l1 *= l2;
    l1 *= l2;
    }
    }
    n=millis();
    d = ((float)n - (float)m) / ((float)i * (float)j);
    d *= 1000.0;
    d -= overhead;
    d /= 20.0;
    Serial.print (d,3);
    Serial.println (F(" us"));



    Serial.print(F(" divide long : "));
    l1 = 2000000000L;
    l2 = 3;
    delay(70); // Allow the Serial text to be transmitted
    m=millis();
    for (i=0; i<1; i++)
    {
    for (j=0; j<2000; j++)
    {
    l1 /= l2;
    l1 /= l2;
    l1 /= l2;
    l1 /= l2;
    l1 /= l2;
    l1 /= l2;
    l1 /= l2;
    l1 /= l2;
    l1 /= l2;
    l1 /= l2;
    l1 /= l2;
    l1 /= l2;
    l1 /= l2;
    l1 /= l2;
    l1 /= l2;
    l1 /= l2;
    l1 /= l2;
    l1 /= l2;
    l1 /= l2;
    l1 /= l2;
    }
    }
    n=millis();
    d = ((float)n - (float)m) / ((float)i * (float)j);
    d *= 1000.0;
    d -= overhead;
    d /= 20.0;
    Serial.print (d,3);
    Serial.println (F(" us"));



    Serial.print(F(" add long : "));
    l1 = 500000000L;
    l2 = 123;
    delay(70); // Allow the Serial text to be transmitted
    m=millis();
    for (i=0; i<4; i++)
    {
    for (j=0; j<10000; j++)
    {
    l1 += l2;
    l1 += l2;
    l1 += l2;
    l1 += l2;
    l1 += l2;
    l1 += l2;
    l1 += l2;
    l1 += l2;
    l1 += l2;
    l1 += l2;
    l1 += l2;
    l1 += l2;
    l1 += l2;
    l1 += l2;
    l1 += l2;
    l1 += l2;
    l1 += l2;
    l1 += l2;
    l1 += l2;
    l1 += l2;
    }
    }
    n=millis();
    d = ((float)n - (float)m) / ((float)i * (float)j);
    d *= 1000.0;
    d -= overhead;
    d /= 20.0;
    Serial.print (d,3);
    Serial.println (F(" us"));



    Serial.print(F(" multiply float : "));
    f1 = 3.24;
    f2 = 1.25;
    delay(70); // Allow the Serial text to be transmitted
    m=millis();
    for (i=0; i<2; i++)
    {
    for (j=0; j<10000; j++)
    {
    f1 *= f2;
    f1 *= f2;
    f1 *= f2;
    f1 *= f2;
    f1 *= f2;
    f1 *= f2;
    f1 *= f2;
    f1 *= f2;
    f1 *= f2;
    f1 *= f2;
    f1 *= f2;
    f1 *= f2;
    f1 *= f2;
    f1 *= f2;
    f1 *= f2;
    f1 *= f2;
    f1 *= f2;
    f1 *= f2;
    f1 *= f2;
    f1 *= f2;
    }
    }
    n=millis();
    d = ((float)n - (float)m) / ((float)i * (float)j);
    d *= 1000.0;
    d -= overhead;
    d /= 20.0;
    Serial.print (d,3);
    Serial.println (F(" us"));



    Serial.print(F(" divide float : "));
    f1 = 312645.24;
    f2 = 1.21;
    delay(70); // Allow the Serial text to be transmitted
    m=millis();
    for (i=0; i<1; i++)
    {
    for (j=0; j<2000; j++)
    {
    f1 /= f2;
    f1 /= f2;
    f1 /= f2;
    f1 /= f2;
    f1 /= f2;
    f1 /= f2;
    f1 /= f2;
    f1 /= f2;
    f1 /= f2;
    f1 /= f2;
    f1 /= f2;
    f1 /= f2;
    f1 /= f2;
    f1 /= f2;
    f1 /= f2;
    f1 /= f2;
    f1 /= f2;
    f1 /= f2;
    f1 /= f2;
    f1 /= f2;
    }
    }
    n=millis();
    d = ((float)n - (float)m) / ((float)i * (float)j);
    d *= 1000.0;
    d -= overhead;
    d /= 20.0;
    Serial.print (d,3);
    Serial.println (F(" us"));



    Serial.print(F(" add float : "));
    f1 = 9876.54;
    f2 = 1.23;
    delay(70); // Allow the Serial text to be transmitted
    m=millis();
    for (i=0; i<1; i++)
    {
    for (j=0; j<10000; j++)
    {
    f1 += f2;
    f1 += f2;
    f1 += f2;
    f1 += f2;
    f1 += f2;
    f1 += f2;
    f1 += f2;
    f1 += f2;
    f1 += f2;
    f1 += f2;
    f1 += f2;
    f1 += f2;
    f1 += f2;
    f1 += f2;
    f1 += f2;
    f1 += f2;
    f1 += f2;
    f1 += f2;
    f1 += f2;
    f1 += f2;
    }
    }
    n=millis();
    d = ((float)n - (float)m) / ((float)i * (float)j);
    d *= 1000.0;
    d -= overhead;
    d /= 20.0;
    Serial.print (d,3);
    Serial.println (F(" us"));



    Serial.print(F(" itoa() : "));
    delay(70); // Allow the Serial text to be transmitted
    m=millis();
    for (i=0; i<1; i++)
    {
    for (j=0; j<10000; j++)
    {
    itoa(i,buffer,10);
    itoa(i,buffer,10);
    itoa(i,buffer,10);
    itoa(i,buffer,10);
    itoa(i,buffer,10);
    itoa(i,buffer,10);
    itoa(i,buffer,10);
    itoa(i,buffer,10);
    itoa(i,buffer,10);
    itoa(i,buffer,10);
    itoa(i,buffer,10);
    itoa(i,buffer,10);
    itoa(i,buffer,10);
    itoa(i,buffer,10);
    itoa(i,buffer,10);
    itoa(i,buffer,10);
    itoa(i,buffer,10);
    itoa(i,buffer,10);
    itoa(i,buffer,10);
    itoa(i,buffer,10);
    }
    }
    n=millis();
    d = ((float)n - (float)m) / ((float)i * (float)j);
    d *= 1000.0;
    d -= overhead;
    d /= 20.0;
    Serial.print (d,3);
    Serial.println (F(" us"));



    long int l = 314159L;
    Serial.print(F(" ltoa() : "));
    delay(70); // Allow the Serial text to be transmitted
    m=millis();
    for (i=0; i<1; i++)
    {
    for (j=0; j<500; j++)
    {
    ltoa(l,buffer,10);
    ltoa(l,buffer,10);
    ltoa(l,buffer,10);
    ltoa(l,buffer,10);
    ltoa(l,buffer,10);
    ltoa(l,buffer,10);
    ltoa(l,buffer,10);
    ltoa(l,buffer,10);
    ltoa(l,buffer,10);
    ltoa(l,buffer,10);
    ltoa(l,buffer,10);
    ltoa(l,buffer,10);
    ltoa(l,buffer,10);
    ltoa(l,buffer,10);
    ltoa(l,buffer,10);
    ltoa(l,buffer,10);
    ltoa(l,buffer,10);
    ltoa(l,buffer,10);
    ltoa(l,buffer,10);
    ltoa(l,buffer,10);
    }
    }
    n=millis();
    d = ((float)n - (float)m) / ((float)i * (float)j);
    d *= 1000.0;
    d -= overhead;
    d /= 20.0;
    Serial.print (d,3);
    Serial.println (F(" us"));



    Serial.print(F(" dtostrf() : "));
    float d3;
    d3 = 3.14159265;
    delay(70); // Allow the Serial text to be transmitted
    m=millis();
    for (i=0; i<2; i++)
    {
    for (j=0; j<1000; j++)
    {
    dtostrf (d3, 6, 2, buffer);
    dtostrf (d3, 6, 2, buffer);
    dtostrf (d3, 6, 2, buffer);
    dtostrf (d3, 6, 2, buffer);
    dtostrf (d3, 6, 2, buffer);
    dtostrf (d3, 6, 2, buffer);
    dtostrf (d3, 6, 2, buffer);
    dtostrf (d3, 6, 2, buffer);
    dtostrf (d3, 6, 2, buffer);
    dtostrf (d3, 6, 2, buffer);
    dtostrf (d3, 6, 2, buffer);
    dtostrf (d3, 6, 2, buffer);
    dtostrf (d3, 6, 2, buffer);
    dtostrf (d3, 6, 2, buffer);
    dtostrf (d3, 6, 2, buffer);
    dtostrf (d3, 6, 2, buffer);
    dtostrf (d3, 6, 2, buffer);
    dtostrf (d3, 6, 2, buffer);
    dtostrf (d3, 6, 2, buffer);
    dtostrf (d3, 6, 2, buffer);
    }
    }
    n=millis();
    d = ((float)n - (float)m) / ((float)i * (float)j);
    d *= 1000.0;
    d -= overhead;
    d /= 20.0;
    Serial.print (d,3);
    Serial.println (F(" us"));



    Serial.print(F(" random() : "));
    delay(70); // Allow the Serial text to be transmitted
    m=millis();
    for (i=0; i<2; i++)
    {
    for (j=0; j<1000; j++)
    {
    r=random(-2147483647,2147483647);
    r=random(-2147483647,2147483647);
    r=random(-2147483647,2147483647);
    r=random(-2147483647,2147483647);
    r=random(-2147483647,2147483647);
    r=random(-2147483647,2147483647);
    r=random(-2147483647,2147483647);
    r=random(-2147483647,2147483647);
    r=random(-2147483647,2147483647);
    r=random(-2147483647,2147483647);
    r=random(-2147483647,2147483647);
    r=random(-2147483647,2147483647);
    r=random(-2147483647,2147483647);
    r=random(-2147483647,2147483647);
    r=random(-2147483647,2147483647);
    r=random(-2147483647,2147483647);
    r=random(-2147483647,2147483647);
    r=random(-2147483647,2147483647);
    r=random(-2147483647,2147483647);
    r=random(-2147483647,2147483647);
    }
    }
    n=millis();
    d = ((float)n - (float)m) / ((float)i * (float)j);
    d *= 1000.0;
    d -= overhead;
    d /= 20.0;
    Serial.print (d,3);
    Serial.println (F(" us"));



    Serial.print(F(" y |= (1<<x) : "));
    delay(70); // Allow the Serial text to be transmitted
    m=millis();
    for (i=0; i<20; i++)
    {
    for (j=0; j<10000; j++)
    {
    v |= _BV(12);
    v |= _BV(12);
    v |= _BV(12);
    v |= _BV(12);
    v |= _BV(12);
    v |= _BV(12);
    v |= _BV(12);
    v |= _BV(12);
    v |= _BV(12);
    v |= _BV(12);
    v |= _BV(12);
    v |= _BV(12);
    v |= _BV(12);
    v |= _BV(12);
    v |= _BV(12);
    v |= _BV(12);
    v |= _BV(12);
    v |= _BV(12);
    v |= _BV(12);
    v |= _BV(12);
    }
    }
    n=millis();
    d = ((float)n - (float)m) / ((float)i * (float)j);
    d *= 1000.0;
    d -= overhead;
    d /= 20.0;
    Serial.print (d,3);
    Serial.println (F(" us"));



    Serial.print(F(" bitSet() : "));
    delay(70); // Allow the Serial text to be transmitted
    m=millis();
    for (i=0; i<20; i++)
    {
    for (j=0; j<10000; j++)
    {
    bitSet (v, 12);
    bitSet (v, 12);
    bitSet (v, 12);
    bitSet (v, 12);
    bitSet (v, 12);
    bitSet (v, 12);
    bitSet (v, 12);
    bitSet (v, 12);
    bitSet (v, 12);
    bitSet (v, 12);
    bitSet (v, 12);
    bitSet (v, 12);
    bitSet (v, 12);
    bitSet (v, 12);
    bitSet (v, 12);
    bitSet (v, 12);
    bitSet (v, 12);
    bitSet (v, 12);
    bitSet (v, 12);
    bitSet (v, 12);
    }
    }
    n=millis();
    d = ((float)n - (float)m) / ((float)i * (float)j);
    d *= 1000.0;
    d -= overhead;
    d /= 20.0;
    Serial.print (d,3);
    Serial.println (F(" us"));



    Serial.print(F(" analogReference() : "));
    delay(70); // Allow the Serial text to be transmitted
    m=millis();
    for (i=0; i<20; i++)
    {
    for (j=0; j<10000; j++)
    {
    analogReference (EXTERNAL);
    analogReference (DEFAULT);
    analogReference (EXTERNAL);
    analogReference (DEFAULT);
    analogReference (EXTERNAL);
    analogReference (DEFAULT);
    analogReference (EXTERNAL);
    analogReference (DEFAULT);
    analogReference (EXTERNAL);
    analogReference (DEFAULT);
    analogReference (EXTERNAL);
    analogReference (DEFAULT);
    analogReference (EXTERNAL);
    analogReference (DEFAULT);
    analogReference (EXTERNAL);
    analogReference (DEFAULT);
    analogReference (EXTERNAL);
    analogReference (DEFAULT);
    analogReference (EXTERNAL);
    analogReference (DEFAULT);
    }
    }
    n=millis();
    d = ((float)n - (float)m) / ((float)i * (float)j);
    d *= 1000.0;
    d -= overhead;
    d /= 20.0;
    Serial.print (d,3);
    Serial.println (F(" us"));


    Serial.print(F(" analogRead() : "));
    delay(70); // Allow the Serial text to be transmitted
    m=millis();
    for (i=0; i<1; i++)
    {
    for (j=0; j<1000; j++)
    {
    analogRead (0);
    analogRead (1);
    analogRead (0);
    analogRead (1);
    analogRead (0);
    analogRead (1);
    analogRead (0);
    analogRead (1);
    analogRead (0);
    analogRead (1);
    analogRead (0);
    analogRead (1);
    analogRead (0);
    analogRead (1);
    analogRead (0);
    analogRead (1);
    analogRead (0);
    analogRead (1);
    analogRead (0);
    analogRead (1);
    }
    }
    n=millis();
    d = ((float)n - (float)m) / ((float)i * (float)j);
    d *= 1000.0;
    d -= overhead;
    d /= 20.0;
    Serial.print (d,3);
    Serial.println (F(" us"));



    Serial.print(F(" analogWrite() PWM : "));
    // Using pin 13 (system led) for output.
    delay(70); // Allow the Serial text to be transmitted
    m=millis();
    for (i=0; i<1; i++)
    {
    for (j=0; j<10000; j++)
    {
    analogWrite (9, 100);
    analogWrite (9, 200);
    analogWrite (9, 100);
    analogWrite (9, 200);
    analogWrite (9, 100);
    analogWrite (9, 200);
    analogWrite (9, 100);
    analogWrite (9, 200);
    analogWrite (9, 100);
    analogWrite (9, 200);
    analogWrite (9, 100);
    analogWrite (9, 200);
    analogWrite (9, 100);
    analogWrite (9, 200);
    analogWrite (9, 100);
    analogWrite (9, 200);
    analogWrite (9, 100);
    analogWrite (9, 200);
    analogWrite (9, 100);
    analogWrite (9, 200);
    }
    }
    n=millis();
    d = ((float)n - (float)m) / ((float)i * (float)j);
    d *= 1000.0;
    d -= overhead;
    d /= 20.0;
    Serial.print (d,3);
    Serial.println (F(" us"));



    Serial.print(F(" delay(1) : "));
    delay(70); // Allow the Serial text to be transmitted
    m=millis();
    for (i=0; i<1; i++)
    {
    for (j=0; j<100; j++)
    {
    delay(1);
    delay(1);
    delay(1);
    delay(1);
    delay(1);
    delay(1);
    delay(1);
    delay(1);
    delay(1);
    delay(1);
    delay(1);
    delay(1);
    delay(1);
    delay(1);
    delay(1);
    delay(1);
    delay(1);
    delay(1);
    delay(1);
    delay(1);
    }
    }
    n=millis();
    d = ((float)n - (float)m) / ((float)i * (float)j);
    d *= 1000.0;
    d -= overhead;
    d /= 20.0;
    Serial.print (d,3);
    Serial.println (F(" us"));



    Serial.print(F(" delay(100) : "));
    delay(70); // Allow the Serial text to be transmitted
    m=millis();
    for (i=0; i<1; i++)
    {
    for (j=0; j<2; j++)
    {
    delay(100);
    delay(100);
    delay(100);
    delay(100);
    delay(100);
    delay(100);
    delay(100);
    delay(100);
    delay(100);
    delay(100);
    delay(100);
    delay(100);
    delay(100);
    delay(100);
    delay(100);
    delay(100);
    delay(100);
    delay(100);
    delay(100);
    delay(100);
    }
    }
    n=millis();
    d = ((float)n - (float)m) / ((float)i * (float)j);
    d *= 1000.0;
    d -= overhead;
    d /= 20.0;
    Serial.print (d,3);
    Serial.println (F(" us"));



    Serial.print(F(" delayMicroseconds(2) : "));
    delay(70); // Allow the Serial text to be transmitted
    m=millis();
    for (i=0; i<20; i++)
    {
    for (j=0; j<10000; j++)
    {
    delayMicroseconds(2);
    delayMicroseconds(2);
    delayMicroseconds(2);
    delayMicroseconds(2);
    delayMicroseconds(2);
    delayMicroseconds(2);
    delayMicroseconds(2);
    delayMicroseconds(2);
    delayMicroseconds(2);
    delayMicroseconds(2);
    delayMicroseconds(2);
    delayMicroseconds(2);
    delayMicroseconds(2);
    delayMicroseconds(2);
    delayMicroseconds(2);
    delayMicroseconds(2);
    delayMicroseconds(2);
    delayMicroseconds(2);
    delayMicroseconds(2);
    delayMicroseconds(2);
    }
    }
    n=millis();
    d = ((float)n - (float)m) / ((float)i * (float)j);
    d *= 1000.0;
    d -= overhead;
    d /= 20.0;
    Serial.print (d,3);
    Serial.println (F(" us"));



    Serial.print(F(" delayMicroseconds(5) : "));
    delay(70); // Allow the Serial text to be transmitted
    m=millis();
    for (i=0; i<5; i++)
    {
    for (j=0; j<10000; j++)
    {
    delayMicroseconds(5);
    delayMicroseconds(5);
    delayMicroseconds(5);
    delayMicroseconds(5);
    delayMicroseconds(5);
    delayMicroseconds(5);
    delayMicroseconds(5);
    delayMicroseconds(5);
    delayMicroseconds(5);
    delayMicroseconds(5);
    delayMicroseconds(5);
    delayMicroseconds(5);
    delayMicroseconds(5);
    delayMicroseconds(5);
    delayMicroseconds(5);
    delayMicroseconds(5);
    delayMicroseconds(5);
    delayMicroseconds(5);
    delayMicroseconds(5);
    delayMicroseconds(5);
    }
    }
    n=millis();
    d = ((float)n - (float)m) / ((float)i * (float)j);
    d *= 1000.0;
    d -= overhead;
    d /= 20.0;
    Serial.print (d,3);
    Serial.println (F(" us"));



    Serial.print(F(" delayMicroseconds(100) : "));
    delay(70); // Allow the Serial text to be transmitted
    m=millis();
    for (i=0; i<1; i++)
    {
    for (j=0; j<1000; j++)
    {
    delayMicroseconds(100);
    delayMicroseconds(100);
    delayMicroseconds(100);
    delayMicroseconds(100);
    delayMicroseconds(100);
    delayMicroseconds(100);
    delayMicroseconds(100);
    delayMicroseconds(100);
    delayMicroseconds(100);
    delayMicroseconds(100);
    delayMicroseconds(100);
    delayMicroseconds(100);
    delayMicroseconds(100);
    delayMicroseconds(100);
    delayMicroseconds(100);
    delayMicroseconds(100);
    delayMicroseconds(100);
    delayMicroseconds(100);
    delayMicroseconds(100);
    delayMicroseconds(100);
    }
    }
    n=millis();
    d = ((float)n - (float)m) / ((float)i * (float)j);
    d *= 1000.0;
    d -= overhead;
    d /= 20.0;
    Serial.print (d,3);
    Serial.println (F(" us"));


    Serial.println(F("-----------"));
    }