zaujimavost pri programovani AVR v GCC
Jan Waclawek
konfera@efton.sk
Úterý Říjen 23 15:48:49 CEST 2007
Mno,
Predovsetkym, ak programujes v C (ci v nejakom HLL), tak nemas mat vobec nijake apriorne predstavy o rychlosti, velkosti kodu, umiestnenia v pamati apod. To vsetko je vysostne pravo prekladaca si urobit ako chce, ak sa zachovaju nejake rozumne pravidla (v tomto pripade vid C99).
Inak vysvetlenie sa urcite najde v spominanom C99 niekde okolo implicitneho pretypovavania na int pri vyhodnocovani vyrazov, v sucinnosti s optimalizatorom gcc; ale nechci odo mna ako neCckara dokladne vysvetlenie...
Mimochodom, ako sa to prelozi ak tu optimalizaciu uplne vypnes?
wek
----- Original Message ---------------
Subject: zaujimavost pri programovani AVR v GCC
From: Richard Kaliciak <hw.kaliciak@stonline.sk>
Date: Tue, 23 Oct 2007 15:27:06 +0200
To: HW-news <hw-list@list.hw.cz>
>Dobry den,
>
>pri pokusoch s AVR a Eclipse+WinAVR som ako prve skusil kratky program:
>---------- begin ----------
>#include <avr/io.h>
>
>void main( void){
> unsigned char counter = 0;
> while(1){
> PORTA = counter++;
> }
>}
>---------- end ----------
>
>Po spusteni sa mi to zdalo pomalsie, ako som cakal. Tu je dovod:
>---------- begin ----------
>void main( void){
> ce: 80 e0 ldi r24, 0x00 ; 0
> d0: 90 e0 ldi r25, 0x00 ; 0
> unsigned char counter = 0;
> while(1){
> PORTA = counter++;
> d2: 8b bb out 0x1b, r24 ; 27
> d4: 01 96 adiw r24, 0x01 ; 1
> d6: fd cf rjmp .-6 ; 0xd2 <main+0x4>
>---------- end ----------
>(counter je v R24 a R25 = 16 bitov)
>
>
>
>Po prepisani programu na:
>---------- begin ----------
>#include <avr/io.h>
>
>void main( void){
> unsigned char counter = 0;
> while(1){
> counter++;
> PORTA = counter;
> }
>}
>---------- end ----------
>
>sa to prelozi takto:
>---------- begin ----------
>void main( void){
> ce: 80 e0 ldi r24, 0x00 ; 0
> unsigned char counter = 0;
> while(1){
> counter++;
> d0: 8f 5f subi r24, 0xFF ; 255
> PORTA = counter;
> d2: 8b bb out 0x1b, r24 ; 27
> d4: fd cf rjmp .-6 ; 0xd0 <main+0x2>
>---------- end ----------
>(counter je v R24 = 8 bitov)
>
>
Další informace o konferenci Hw-list