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