Re: Optimizations with avr-gcc

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

 



That's because all I/O Registers, including DDRB, are declared as
"volatile". Accesses to it won't be optimized.
For example this code would turn on an I/O pin for one cycle:
PORTB |= 1;
PORTB &= ~1;
If the compiler considered the first instruction as useless and
optimized it out, the pin would never be turned on. So, PORTB and the
others are declared as volatile to prevent this optimization.

On 25.06.2014 17:23, Sandeep K Chaudhary wrote:
> Hi guys,
>
> I have a small program with the following statements -
>
> DDRB = 0x1;
>
> DDRB = DDRB<<2;
>
> DDRB += 5;
>
> I am compiling it with "avr-gcc -mmcu=atmega8 -O3 -fdump-tree-all
> ledchase.c". As you can see, I am dumping the content after each pass
> in avr-gcc.
>
> In the dumps, I see that neither statement 2 nor 3 is optimized i.e. I
> don't see "DDRB = 4 (from 2nd statement)" or "DDRB = 5 (from 3rd
> statement)".
>
> My question is - Is it possible to achieve such optimizations with
> avr-gcc? if not, why?
>
> Please let me know. It would help me a lot. Thanks in advance !
>
> Thanks and regards,
> Sandeep.





[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux