Here is a little class I use to time stuff,
its template parameter is 'true' for high resolution ( micros ), or false for low ( millis ).
template< bool _HiRes = true >
class TimeThis{
protected:
typedef TimeThis< _HiRes > MYTYPE;
inline static const unsigned long GetTime( void ) { return ( _HiRes ? micros : millis )(); }
public:
TimeThis( unsigned long &u_TimeRef ) : u_Time( u_TimeRef = MYTYPE::GetTime() ) { return; }
~TimeThis( void ) { this->u_Time = MYTYPE::GetTime() - this->u_Time; }
private:
unsigned long &u_Time;
};
void loop(){
unsigned long u_Time;
{
TimeThis< true > t_Time( u_Time );
//Lengthy operation
}
Serial.print( "Run Time: " );
Serial.println( u_Time );
}
void setup(){Serial.begin(9600);}