Also one of the great things with playing with things like a Teensy (and in most Arduinos) is you can often simply look at the sources and see exactly what is happening.
There is nothing magical about it, although the class does have a lot of C++ gunk, for most cases...
But if you look in the cores of which teensy in this case 4 (???\cores\teemsy4\elapsedMillis.h), you will see the definition of this whole class:
Code:
class elapsedMicros
{
private:
unsigned long us;
public:
elapsedMicros(void) { us = micros(); }
elapsedMicros(unsigned long val) { us = micros() - val; }
elapsedMicros(const elapsedMicros &orig) { us = orig.us; }
operator unsigned long () const { return micros() - us; }
elapsedMicros & operator = (const elapsedMicros &rhs) { us = rhs.us; return *this; }
elapsedMicros & operator = (unsigned long val) { us = micros() - val; return *this; }
elapsedMicros & operator -= (unsigned long val) { us += val ; return *this; }
elapsedMicros & operator += (unsigned long val) { us -= val ; return *this; }
elapsedMicros operator - (int val) const { elapsedMicros r(*this); r.us += val; return r; }
elapsedMicros operator - (unsigned int val) const { elapsedMicros r(*this); r.us += val; return r; }
elapsedMicros operator - (long val) const { elapsedMicros r(*this); r.us += val; return r; }
elapsedMicros operator - (unsigned long val) const { elapsedMicros r(*this); r.us += val; return r; }
elapsedMicros operator + (int val) const { elapsedMicros r(*this); r.us -= val; return r; }
elapsedMicros operator + (unsigned int val) const { elapsedMicros r(*this); r.us -= val; return r; }
elapsedMicros operator + (long val) const { elapsedMicros r(*this); r.us -= val; return r; }
elapsedMicros operator + (unsigned long val) const { elapsedMicros r(*this); r.us -= val; return r; }
};
So if you have code like:
Code:
elapsedMicros em;
function_to_time();
Serial.println(em, DEC);
The code and data usage is more or less identical to simply doing:
Code:
uint32_t start_time = micros();
function_to_time();
Serial.println((uint32_t)(micros()-start_time), DEC);
But using the class makes it a little easier to read!