zaujimavost pri programovani AVR v GCC

Richard Kaliciak hw.kaliciak@stonline.sk
Úterý Říjen 23 15:27:06 CEST 2007


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



Další informace o konferenci Hw-list