zaujimavost pri programovani AVR v GCC
Miroslav Sinko
sinkomiro@rocketmail.com
Úterý Říjen 23 20:08:15 CEST 2007
Tak som sa pohral. Optimalizacie som skusal O1, O2 aj O3 - davaju
rovnake vysledky, Os (na velkost) nema vplyv.
No na co som prisiel... Kody z prikladov nie su totozne! V druhom
priklade by bol totozny kod s prvym prikladom takto:
while(1){
PORTA = counter;
counter++;
}
Potom aj vysledny asm je vygenerovany totozne s prvym prikladom (ADIW).
No ale aby to bolo este zaujimavejsie, staci vynechat inicializaciu
countera a aj v tomto mojom upravenom priklade to potom skompiluje s
instrukciou SUBI.
00000092 <main>:
92: 8b bb out 0x1b, r24 ; 27
94: 8f 5f subi r24, 0xFF ; 255
96: fd cf rjmp .-6 ; 0x92 <main>
miro
--- Richard Kaliciak <hw.kaliciak@stonline.sk> wrote:
> 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)
>
>
> Vie mi to niekto vysvetlit?
>
> Richard Kaliciak
> _______________________________________________
> HW-list mailing list - sponsored by www.HW.cz
> Hw-list@list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
>
__________________________________________________
Do You Yahoo!?
Tired of spam? Yahoo! Mail has the best spam protection around
http://mail.yahoo.com
Další informace o konferenci Hw-list