Odpowiedz 
 
Ocena wątku:
  • 0 Głosów - 0 Średnio
  • 1
  • 2
  • 3
  • 4
  • 5
AVR STUDIO - ASM
SP5FCS Offline
Adam
*****

Liczba postów: 1,071
Dołączył: 02-02-2009
Post: #20
RE: AVR STUDIO - ASM
(12-04-2012 10:29)JaHo napisał(a):  (PS. Mocno bym się zdziwił gdyby się okazało że kompilator C CodeVision stosuje znacząco inne "calling conventions", bo te używane przez avr gcc wydają się być bardzo sensowne i dobrze dopasowane do małych procków z niewielką ilością RAM.)

Kolego, JaHo lubię dyskutować ale na argumenty a nie o tym co mi się wydaję. Programuję zarówno w assemblerze jak i C na AVR z łączeniem obu języków w obie strony. Zawsze sprawdzam wygenerowany kod asm przez kompilator, jeśli jest zły to robię wstawkę w assemblerze. Proponuję zainstalować sobie demo CodeVision i na własne oczy zobaczyć jak jest zorganizowany stos danych oraz przekazywanie parametrów do funkcji.

Nigdy nie twierdziłem, że wszystkie kompilatory mają odrębny stos danych, wyraźnie podkreśliłem, że tak jest w tym którego używam czyli CodeVision.
W kompilatorze GCC dla AVR jest tak jak napisał powyżej kol. JaHo, parametry do funkcji przekazywane są poprzez rejestry co ilustruje podgląd kodu w assemblerze przykładowej funkcji.

Kod:
@0000007A: main
19:        Oblicz_FTW(20000000,400000000);        //oblicz FTW dla f_vfo=20MHz
+0000007A:   E060        LDI       R22,0x00       Load immediate
+0000007B:   E27D        LDI       R23,0x2D       Load immediate
+0000007C:   E381        LDI       R24,0x31       Load immediate
+0000007D:   E091        LDI       R25,0x01       Load immediate
+0000007E:   E020        LDI       R18,0x00       Load immediate
+0000007F:   E834        LDI       R19,0x84       Load immediate
+00000080:   ED47        LDI       R20,0xD7       Load immediate
+00000081:   E157        LDI       R21,0x17       Load immediate
+00000082:   940E0049    CALL      0x00000049     Call subroutine
20:       }
+00000084:   9508        RET                      Subroutine return

W Code Vision te same parametry wejściowe typu long int są kładzione na stosie danych wg. wskaźnika [YH:YL] poprzez dwukrotne wywołanie procedury PUTPARD1, podgląd w assemblerze:

Kod:
_main:
;0000 0013  Oblicz_FTW(20000000,400000000);        //oblicz FTW dla f_vfo=20MHz
    __GETD1N 0x1312D00
    CALL __PUTPARD1
    __GETD1N 0x17D78400
    CALL __PUTPARD1
    RCALL _Oblicz_FTW
;0000 0014 }

__PUTPARD1:
    ST   -Y,R23
    ST   -Y,R22
    ST   -Y,R31
    ST   -Y,R30
    RET

Język GCC powstał dużo wcześniej na inne procesory a po pojawieniu się rodziny AVR został przystosowany do tych procesorów. Moim zdanie metoda przekazywania danych zastosowana w GCC jest gorsza, mniej przejrzysta i blokuje dostęp do rejestrów. Mieszanie adresów powrotu z danymi wejściowymi na jednym stosie utrudnia dostęp do danych w kodzie funkcji. To między innymi przyczyna gorszych wyników w teście porównawczym obu kompilatorów gdzie GCC był wolniejszy i generował większy kod. Nie chcę nikogo zniechęcać do GCC ani przekonywać do CodeVision bo to sprawa indywidualnych preferencji.

Warto odnotować odmienne podejście do tematu stosu w różnych kompilatorach i od czasu do czasu sprawdzić jaki to ma wpływ na jakość generowanego kodu. Ta dyskusja powinna toczyć się w innym wątku.

73 Adam
12-04-2012 12:44
Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
Odpowiedz 


Wiadomości w tym wątku
AVR STUDIO - ASM - SQ6ADE - 14-10-2010, 0:06
RE: AVR STUDIO - ASM - SP5FCS - 14-10-2010, 22:39
RE: AVR STUDIO - ASM - SQ6ADE - 15-10-2010, 21:04
RE: AVR STUDIO - ASM - SQ6ADE - 28-10-2010, 21:55
RE: AVR STUDIO - ASM - SQ6OXK - 28-10-2010, 23:53
RE: AVR STUDIO - ASM - SP9FKP - 14-11-2010, 14:36
RE: AVR STUDIO - ASM - SP9FKP - 02-12-2010, 8:47
RE: AVR STUDIO - ASM - SQ6ADE - 02-12-2010, 14:08
RE: AVR STUDIO - ASM - SP4EJT - 10-04-2012, 15:11
RE: AVR STUDIO - ASM - SP5FCS - 10-04-2012, 22:22
RE: AVR STUDIO - ASM - JaHo - 10-04-2012, 16:52
RE: AVR STUDIO - ASM - SP4EJT - 10-04-2012, 19:05
RE: AVR STUDIO - ASM - SQ6ADE - 10-04-2012, 19:10
RE: AVR STUDIO - ASM - SP4EJT - 10-04-2012, 19:31
RE: AVR STUDIO - ASM - SQ6ADE - 10-04-2012, 20:48
RE: AVR STUDIO - ASM - SQ6ADE - 10-04-2012, 22:25
RE: AVR STUDIO - ASM - JaHo - 11-04-2012, 22:09
RE: AVR STUDIO - ASM - SP5FCS - 11-04-2012, 23:02
RE: AVR STUDIO - ASM - JaHo - 12-04-2012, 10:29
RE: AVR STUDIO - ASM - SP5FCS - 12-04-2012 12:44
RE: AVR STUDIO - ASM - JaHo - 12-04-2012, 16:03

Skocz do:


Użytkownicy przeglądający ten wątek: 1 gości