On 20/02/13 22:24, Rick Mann wrote:

On Feb 20, 2013, at 2:08 , David Brown <[email protected]>
wrote:

Another option that might be usable (depending on how things are
split within different modules) is to make the ISR just a wrapper
for the "real" code:

class x { friend void ::timerInterrupt(void); private : int i; };

class x the_x;

static void timerInterrupt(void) { the_x.i++; }

ISR(TIMER1_OVF_vect) { timerInterrupt(); }


With non-negligible optimisations enabled, the static
timerInterrupt function will be inlined within the ISR function, so
there is no extra overhead.  (Normally there can be significant
overhead if an interrupt function calls an external function.)

Just a thought for another style.

Yeah, that's how I had been doing it, but I wanted to ensure I didn't
have the overhead in this case, even when no optimizations were
used.


The key point here is never to compile without optimisations enabled. Why would you want to do that anyway? It's like driving your car without ever moving out of first gear. You've got a top-class optimising compiler - don't cripple it by disabling it's optimisations! Even for debugging or analysing code, -O1 is usually easier to work with than -O0.

But if you /really/ want to disable optimisations, then "__attribute__((always_inline))" is your friend here.

mvh.,

David

_______________________________________________
AVR-chat mailing list
[email protected]
https://lists.nongnu.org/mailman/listinfo/avr-chat

Reply via email to