benchmark_peripheral.ino


1
//define LED_BUILTIN 13 // for Arduino Uno
2
3
void setup() 
4
{
5
  Serial.begin(115200);
6
  pinMode(LED_BUILTIN, OUTPUT);
7
8
  delay(3000);
9
10
  Serial.println("***************************************************");
11
  Serial.println("*              Arduino Benchmark                  *");
12
  Serial.println("***************************************************");
13
  Serial.println("");
14
}
15
16
void benchmark_digitalWrite(uint32_t count)
17
{
18
  uint32_t n;
19
  for(n=0;n<count/8;n++)
20
  {
21
    // unroled loop to minimize for loop influence
22
    digitalWrite(LED_BUILTIN,HIGH);
23
    digitalWrite(LED_BUILTIN,LOW);
24
    digitalWrite(LED_BUILTIN,HIGH);
25
    digitalWrite(LED_BUILTIN,LOW);
26
    digitalWrite(LED_BUILTIN,HIGH);
27
    digitalWrite(LED_BUILTIN,LOW);
28
    digitalWrite(LED_BUILTIN,HIGH);
29
    digitalWrite(LED_BUILTIN,LOW);
30
31
  }
32
}
33
34
void benchmark_analogRead(uint32_t count)
35
{
36
  uint32_t n;
37
  for(n=0;n<count;n++)
38
  {
39
    analogRead(0);
40
  }
41
}
42
43
void loop() 
44
{
45
  uint16_t n;
46
47
  uint32_t startTime;
48
  uint32_t stopTime;
49
  uint32_t numberOfTries=100000;
50
  uint32_t timeNeeded;
51
  
52
  Serial.println("digitalWrite speed benchmark");
53
  Serial.println("=============================");
54
    
55
  startTime=micros();
56
  benchmark_digitalWrite(numberOfTries);
57
  stopTime=micros();
58
  timeNeeded = stopTime-startTime;
59
  
60
  Serial.print("number of tries: ");Serial.print(numberOfTries);Serial.print("  ");
61
  Serial.print("duration [us]: "); Serial.print(timeNeeded);Serial.print("  ==> ");
62
  Serial.print("speed [megaSamples/second] : "); Serial.println((float)numberOfTries / timeNeeded); Serial.print("  "); 
63
  Serial.println("");   
64
  
65
  Serial.println("analogRead speed benchmark");
66
  Serial.println("=============================");
67
    
68
  startTime=micros();
69
  benchmark_analogRead(numberOfTries);
70
  stopTime=micros();
71
  timeNeeded = stopTime-startTime;
72
  
73
  Serial.print("number of tries: ");Serial.print(numberOfTries);Serial.print("  ");
74
  Serial.print("duration [us]: "); Serial.print(timeNeeded);Serial.print("  ==> ");
75
  Serial.print("speed [kiloSamples/second] : "); Serial.println((float)numberOfTries / timeNeeded * 1000); Serial.print("  ");
76
  Serial.println("");
77
  
78
  delay(5000);
79
  Serial.println("");
80
  Serial.println("");
81
  Serial.println("");
82
}