On Sun, Oct 4, 2009 at 12:33 PM, Vaclav Peroutka
<address@hidden> wrote:
Hello all,
I am sorry, but maybe somebody has expierience why the following code is deleted during optimization. I have two functions for printing of numbers (uart_puts() just send string to UART) :
void uart_putux( unsigned int aInt)
{
unsigned char buf[5];
unsigned char icnt = 4;
buf[icnt--] = 0x00;
while(icnt+1) {
buf[icnt] = (aInt&0x0f) + 0x30;
if (buf[icnt] > 0x39) {
buf[icnt] += 0x07;
}
aInt >>= 4;
icnt--;
}
uart_puts( buf);
}
void uart_putlx( unsigned long aInt)
{
unsigned char buf[9];
unsigned char icnt = 8;
buf[icnt--] = 0x00;
while(icnt+1) {
buf[icnt] = (aInt&0x0f) + 0x30;
if (buf[icnt] > 0x39) {
buf[icnt] += 0x07;
}
aInt >>= 4;
icnt--;
}
uart_puts( buf);
}
After I compile and link the code, in .LST I see following:
void uart_putux( unsigned int aInt)
{
35a: ff cf rjmp .-2 ; 0x35a <uart_putux>
0000035c <uart_putlx>:
}
uart_puts( buf);
}
void uart_putlx( unsigned long aInt)
{
35c: ff cf rjmp .-2 ; 0x35c <uart_putlx>
For compilation I use following:
/opt/avr-gcc.4.3.4/bin/avr-gcc -g -mmcu=atmega16 -Wall -Wstrict-prototypes -Os -mcall-prologues -I /opt/avr-gcc.4.3.4/bin/include -fno-inline-small-functions -fno-reorder-blocks -fno-reorder-blocks-and-partition -fno-reorder-functions -fno-toplevel-reorder -fno-move-loop-invariants -c -o hal.o hal.c
If I remove "-Os", the code is there. But if I understand correctly, gcc sees the code unusable. What is bad inside ? The code worked in older avr-gcc...
Thank you for help,
Vaclav
_______________________________________________
AVR-GCC-list mailing list
address@hidden
http://lists.nongnu.org/mailman/listinfo/avr-gcc-list