markruff icon

Arduino circular counter modulus vs branch

markruff | PRO | 01/20/16 12:05:20 AM UTC | 0 ⭐ | 427 👁️ | Never ⏰ | []
C++ |

790 B

|

None

|

0 👍

/

0 👎

/*
 * When counting in a circular fashion 0, 1, 2, 3, 0, 1 ...
 * branching is more efficient than modulus (%) operation
 * 
 *
 *
 */
 
int counter = 0;
 
void setup() {
  Serial.begin(9600);
}
 
void loop() {
  unsigned long int start;
  unsigned long int finish;
 
  // modulus operation 
 
  counter = 0;
  start = millis();
  for ( int i = 0 ; i < 32000 ; i++ ) {
    counter = (counter + 1) % 4;
  }
  finish = millis();
  Serial.print("modulus time: ");
  Serial.println(finish - start);
 
  // branch operation
 
  counter = 0;
  start = millis();  
  for ( int i = 0 ; i < 32000 ; i++ ) {
    counter = counter + 1;
    if (counter == 4) {
      counter = 0;
    }
  }
  finish = millis();
  Serial.print("branch time: ");
  Serial.println(finish - start);
 
}

Comments