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