[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [avr-gcc-list] Avr-gcc Produces Incorrect Code with -Os

From: hutchinsonandy
Subject: Re: [avr-gcc-list] Avr-gcc Produces Incorrect Code with -Os
Date: Thu, 22 May 2008 15:05:23 -0400


The problem with the function is typical housekeeping overhead gets wrapped up.

To take a silly example:

Say you want to send some message to ISR (via memory) using critical function

critical void function(int *buffer, int *cValue)
*cValue++ = *buffer++;

Getting *buffer++ does not need ISR disabled. Perhaps neither does the cValue++;

So this method, although not wrong, is something I would normally reject for time critical systems, where latency is key. Inline coding has less overhead but even then its not perfect - though perhaps more palatable than assembler.

I do not know much about the gcc atomic operations. But it might be worth reviewing. There may be some hooks that make it work well with optimisations without adding a bunch of code hacks. Also it makes code more portable (Atmel ARM or course!)


-----Original Message-----
From: Weddington, Eric <address@hidden>
To: address@hidden; address@hidden; address@hidden; address@hidden
Sent: Thu, 22 May 2008 2:33 pm
Subject: RE: [avr-gcc-list] Avr-gcc Produces Incorrect Code with -Os

-----Original Message-----
From: address@hidden [mailto:address@hidden
Sent: Thursday, May 22, 2008 11:48 AM
To: address@hidden; Weddington, Eric; address@hidden;
Subject: Re: [avr-gcc-list] Avr-gcc Produces Incorrect Code with -Os

You can do it this way but you won't have precise control over
disable/restore timing. So you will typically disable
interrupts longer
than is needed.

If the disable can happen right after prologue and the enable right
before the epilogue then I don't see an issue. Caveat emptor. Maybe I'm
missing something?

Also disabling all interrupts is often not what you need. Disabling
specfic interrupts is more palatable on real time systems.

True, but it can't be easily done in the compiler. Disabling all
interrupts is a common enough approach, and while it may not ideal for
every application, I think that having this function attribute would be
a useful tool available to the programmer.

NMI is a feature not a limitation - it supposed to  stop such
hanging up the CPU.

BTW gcc provides atomic operations on other ports.

What kinds of different mechanisms do they provide? Would any of them be
useful for the AVR port?

AVR-GCC-list mailing list

reply via email to

[Prev in Thread] Current Thread [Next in Thread]