RTV forum PL | NewsGroups PL

Czemu funkcje w AVR-G++ mają różne sposoby kompilacji? Analiza kodu dla ATMega8

AVR-G++ czemu się tak kompiluje?

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - Czemu funkcje w AVR-G++ mają różne sposoby kompilacji? Analiza kodu dla ATMega8

Sawik
Guest

Fri Oct 19, 2007 12:41 pm   



Witam

Poniżej fragment z listingu kompilatora (uC==ATMega8):

byte SPI_TRX(char cData=0)
{
SPDR = cData; // Start transmission
104: 8f b9 out 0x0f, r24 ; 15
while (!(SPSR & (1<<SPIF))); // Wait for transmission complete
106: 77 9b sbis 0x0e, 7 ; 14
108: fe cf rjmp .-4 ; 0x106 <_Z7SPI_TRXc+0x2>
return SPDR;
10a: 8f b1 in r24, 0x0f ; 15
}
10c: 99 27 eor r25, r25
10e: 08 95 ret

00000110 <_Z7RS_znakh>:

void RS_znak(byte data)
{
110: 48 2f mov r20, r24
112: 21 e0 ldi r18, 0x01 ; 1
114: 30 e0 ldi r19, 0x00 ; 0
while (!(UCSRA&(1<<UDRE))); // Wait for empty transmit buffer
116: 8b b1 in r24, 0x0b ; 11
118: 99 27 eor r25, r25
11a: 55 e0 ldi r21, 0x05 ; 5
11c: 96 95 lsr r25
11e: 87 95 ror r24
120: 5a 95 dec r21
122: e1 f7 brne .-8 ; 0x11c <_Z7RS_znakh+0xc>
124: 82 27 eor r24, r18
126: 93 27 eor r25, r19
128: 80 fd sbrc r24, 0
12a: f5 cf rjmp .-22 ; 0x116 <_Z7RS_znakh+0x6>
UDR=data; // Put data into buffer, sends the data
12c: 4c b9 out 0x0c, r20 ; 12
12e: 08 95 ret


Czy ktoś mi może wytłumaczyć, dlaczego pierwsza funkcja kompiluje się
normalnie, a druga do testowania jednego bitu robi takie kombinacje?


Jak już kiedyś wspominałem, robię na pracę magisterską generator DDS -
http://www.et.put.poznan.pl/~krzychu/mgr/ . Choć urządzenie już prawie
gotowe (kończę oprogramowanie), może macie jakieś uwagi? :)

--
pozdrawiam
Sawi

Bogdan G
Guest

Fri Oct 19, 2007 1:28 pm   



Quote:


Czy ktoś mi może wytłumaczyć, dlaczego pierwsza funkcja kompiluje się
normalnie, a druga do testowania jednego bitu robi takie kombinacje?


Mi skompilowalo sie normalnie:

while (!(UCSRA&(1<<UDRE)));
5002: 5d 9b sbis 0x0b, 5 ; 11
5004: fe cf rjmp .-4 ; 0x5002 <main+0x17c>

U Ciebie potraktowało to jako liczby 16-bitowe. Albo 1 jest 16 - bitowa albo
UCSRA. Ale dlaczego nie wiem.

Zbych
Guest

Fri Oct 19, 2007 6:12 pm   



Sawik przemówił ludzkim głosem:
Quote:
Witam

Poniżej fragment z listingu kompilatora (uC==ATMega8):
[...]
Czy ktoś mi może wytłumaczyć, dlaczego pierwsza funkcja kompiluje się
normalnie, a druga do testowania jednego bitu robi takie kombinacje?

Jest to prawdopodobnie związane z błędnym obliczaniem kosztu operacji
podczas optymalizacji kodu przez gcc. Więcej informacji znajdziesz tutaj:
http://lists.gnu.org/archive/html/avr-gcc-list/2007-08/msg00011.html

elektroda NewsGroups Forum Index - Elektronika Polska - Czemu funkcje w AVR-G++ mają różne sposoby kompilacji? Analiza kodu dla ATMega8

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map