I have a macro:
#define EnterCritical() do { SP++; *(unsigned char idata *)(SP-1) = IE; EA = 0; } while (0);
Hi Jon. That's an interesting idea. I have to see how that fits into the code, and how elegantly I can incorporate it into the preprocessor. Off the top of my head, I know of one place where my code requires attention when using this method. Look at this (inside a pragma-disabled function):
... for (many iterations) { do_something_looooooooong; enable interrupts; disable interrupts; } ...
Maybe you'll want to change that to...
#pragma disable void do_something (void) { . . . } void do_something_loop (void) { . . . //enable interrupts . . . for (i = 0; i < ???; i++) do_something (); . . . }
Yes, that would work. Andrew