> -----Original Message----- > From: [EMAIL PROTECTED] > [mailto:[EMAIL PROTECTED] > On Behalf Of Joerg Wunsch > Sent: Monday, 8 January 2007 10:02 PM > To: [email protected] > Subject: Re: [avr-libc-dev] New Atomic.h header? > > > As Ron wrote: > > > I have used these two for some time now. > > > > static inline STATE_REG SaveState(void) > > { > > STATE_REG flags = SREG; // get processor state > > cli(); // turn off interrupts > > return flags; // return machine state > > } > > This is something like the "manual version". > > Dercy & Dean's macros are much more eloquent (IMHO) as they > are based on a specific GCC feature (attribute cleanup) so > they are fully automatic and bullet-proof, no matter which > way you leave the protected block. Therefore, I personally > like that version much more than the manual option (which > I've been using before to date as well). It's not easy to > understand at the first glimpse (until you read about all the > hairy details in the GCC manual), but when shipping this as > library code, and documenting it well, it's completely opaque > to the users, and "just works".
My intent was to show that the use of inline and -Os actually reduces all that C code to just 2 instructions on entry and 1 on exit, but the intent of the C code is still obvious to the reader. IMHO a benign use of the compiler's powers. I have no argument against "it just works", it is probably the wave of the future (look at .Net), but I approach its use in small computers with some caution. Cheers, Ron. > My only concern with it was about extending it to non-atomic > blocks, and to blocks that force a particular state on exit > rather than returning to the previous state. This is where > I'd like to see other developer's opinions -- it's completely > fine with me to supply the basic version (atomic block, > interrupts disabled inside the block, interrupt state > restored upon exit) the way Dean was suggesting, as it > appears to be a frequently requested item. > > -- > cheers, J"org .-.-. --... ...-- -.. . DL8DTL > http://www.sax.de/~joerg/ NIC: JW11-RIPE Never trust an operating system you don't have sources for. ;-) _______________________________________________ AVR-libc-dev mailing list [email protected] http://lists.nongnu.org/mailman/listinfo/avr-libc-dev _______________________________________________ AVR-libc-dev mailing list [email protected] http://lists.nongnu.org/mailman/listinfo/avr-libc-dev
