zaujimavost pri programovani AVR v GCC
andrej jancura
hw_aj@zoznam.sk
Úterý Říjen 23 18:11:19 CEST 2007
Ahoj Riso,
na toto sa musis spytat priamo autora toho kompilatora... Ine vysvetlenie
podla mna nie je.
Inak toto je konkretny priklad toho preco si robit vlastne poznamky ku
kompilatoru, (okrem ineho sa stane z Teba velky guru :o) ). Mne sa ale
osvedcilo programovat v C sposobom ala asembler, teda nepouzivat ziadne
krkolomne vyrazy a funkcie. Na PIC my vysiel vzdy najkratsi optimalny kod. V
pripade AVR mas vsak moznosti viacere a zalezi len na tom, ako to ktory
kompilator prelozi.
Mimochodom mohol by to byt pekny test jednotlivych kompilatorov. Na AVR su
GCC, CodeVision, ICC, IAR a este par dalsich.
A.
p.s.: Jeden dovod ma predsa len napadol, ked budes robit niekedy reverz
kodu, s velmi vysokou pravdepodobnostou budes moct povedat, ktory kompilator
sa pouzil...
> 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
Content-Disposition: form-data; name="send"
Odoslať
--- reklama -----------------------------------------------------
Nájdi už konečne tú správnu cestu!
http://mapy.zoznam.sk
Další informace o konferenci Hw-list