-
-
Save SyncChannel/1e509ae9e8a34cc1e56a to your computer and use it in GitHub Desktop.
// 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("-----------")); | |
} |
Interesting but non functional...
Arduino: 1.8.19 (Linux), Board: "ATtiny88 (Micronucleus, MH-ET t88 w/16MHz CLOCK), Enabled, 16 MHz (external 16MHz, USB), MH Tiny, B.O.D. Enabled (4.3v), Reset, Upgrade (via USB, fuses unchanged), Always, Enabled, Port A (pins 23~26)"
/home/btg/Documents/reaspeedtest/reaspeedtest.ino: In function 'void speedTest()':
reaspeedtest:985:24: error: 'EXTERNAL' was not declared in this scope
analogReference (EXTERNAL);
^~~~~~~~
/home/btg/Documents/reaspeedtest/reaspeedtest.ino:985:24: note: suggested alternative: 'INTERNAL'
analogReference (EXTERNAL);
^~~~~~~~
INTERNAL
exit status 1
'EXTERNAL' was not declared in this scope
This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.
Thanks for this code. But how do i calculate the FLOPS(floating point operation per second) from the output. Thanks