zaujimavost pri programovani AVR v GCC

Ing. Petr Weissar, Ph.D. weissar@kae.zcu.cz
Úterý Říjen 23 20:02:26 CEST 2007


Ahoj, neznam sice AVR-ko prilis, ale ten kod je pokazdy v C jiny, ono ti to 
chodi ruzne ... Pokud prvni priklad je:

	PORTA = counter++;

Tak ekvivalent je sekvence:

	PORTA = counter;
	counter++;

V tom prvnim mas totiz POST-inkrement, coz jsi ve svem prikladu nezohlednil. 
Zkus to takto prelozit, jestli se to nahodou "nespravi" :-)

Petr

> 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
> 




Další informace o konferenci Hw-list