eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikaC vs. ASM na przykładzie PIC18FOdp: Odp: C vs. ASM na przykładzie PIC18F
  • Data: 2014-04-05 23:19:19
    Temat: Odp: Odp: C vs. ASM na przykładzie PIC18F
    Od: Sylwester Łazar <i...@a...pl> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    >> W ATMEGA są zdaje się instrukcje 16-bitowe.
    >tak
    >> W takim razie oznacza to, że jest <66 instrukcji?
    >65

    Dzięki. Dobra robota.
    Podoba mi się ten ATMEGA32 (jak na 8-bitowca)
    Ma fajne instrukcje:
    1) MOVW Rd, Rr Copy Register Word Rd+1:Rd <- Rr+1:Rr
    w jednym cyklu!
    3x jej używają w naszym programie testowym. Nie dziwię się. Tego brakuje w
    PIC.
    2) LDI Rd, K Load Immediate Rd <- K
    14x jej używają
    Też w jednym cyklu do dowolnego rejestru. Tez brakuje w PICu. Wszystko przez
    WREG trzeba przenosić.
    3)CPI Rd,K Compare Register with Immediate Rd - K
    3x użyta
    Też w jednym cyklu. Też brakuje w PICu.
    4) CPC Rd,Rr Compare with Carry Rd - Rr - C
    3x użyta.
    Też występuje w jednym cyklu.
    Zdaje się, że tak fajnie można porównać w 4 instrukcjach 2bajtową liczbę.
    ldi r26, 0x00 ; 0
    cpi r30, 0x86 ; 134
    cpc r31, r26
    brne .-18 ; 0xbe <zlicz+0x2c>
    Szkoda tylko, że nie ma takiego porównania cpc ze stałą i tutaj musiał
    załadować najpierw do r26 zero.
    W PIC18 jest CPFSEQ, która ze skokiem wykonuje się w 3 cyklach, ale też
    trzeba załadować do w stałą
    i też tylko jeden bajt, a nie słowo. Ach te ośmiobitowce :-(
    5)MOV Rd, Rr Move Between Registers Rd <- Rr
    5x występuje
    Też w jednej instrukcji i też fajne.
    PIC18 ma MOVFF, ale trwa 2 cykle, czyli identycznie, jak w PIC16
    MOVF R1,w
    MOVWF R2
    tyle, że nie używa w.
    ----------------------------------
    Podsumowując:
    1) Kod wygląda dość ciekawie, ale coś mi się zdaje, że można to jeszcze
    skrócić przynajmniej do 45 instrukcji z takim zestawem rozkazów.
    2) rozkazy korzystające z indeksów trwają zawsze 2 cykle
    np.
    LD Rd, Z Load Indirect Rd <- (Z)
    3) pętla główna sortowania zajmuje aż 34 rozkazy.
    8 rozkazów 2 cyklowych
    26 rozkazów 1 cyklowych
    czyli 26+2*8=26+16=42 cykle

    4) Ja mam w ASM na PIC18F 20 instrukcji w pętli.
    I tak:
    6 wykonujących się w 2 cyklach
    14 wykonujących się w 1 cyklu.
    Co daje mimo bardziej ubogiej listy rozkazów 14+2*6=14+12=26cykli

    W cyklach wychodzi C/ASM= 42/26=1,62
    Całkiem nieźle jak na razie. Nawet nie dwukrotna nadbudowa.
    5) ATMEGA32 może pracować, jak dobrze wyczytałem @16MHz z czasem jednego
    cyklu: Tcy=1/16=62,5ns.
    Daje to obieg pętli:
    42*62,5=2,625us
    Dla PICa 18F2320 @40MHz Tcy=1/40*4=100ns
    Daje to obieg pętli:
    26*100= 2,6us

    I to jest ciekawa sprawa.
    ==================================================
    ATMEGA32 z kompilatorem C (nie wiem jaka wersja?) Avr studio4
    Wykonuje tą samą funkcję, którą napisałem w ASM na PIC18 mniej więcej w tym
    samym czasie!
    Sukces polega zapewne na tym, że ATMEGA32 wydaje się dość zgrabnym
    maleństwem,
    a kompilator korzysta z listy rozkazów dość logicznie.
    Oba procki mają tylko 3 rejestry indeksowe. Jeden więcej byłby w tym
    przypadku pomocny.
    ATMEGA32 jakieś 12-15 zł
    PIC18F2320 jakieś 20 -28 zł
    Polecam ATMEGA32 w takim razie, zarówno do pracy w ASM jak i w C.
    Choć zaznaczam, że na ATMEGA32 kawałka kodu jeszcze nie napisałem w ASM :-)
    Jednak, 8-bitowce to marne są,
    więc jeśli już lepiej to takiego 32MX220F032B-50ISP za 8 zł.
    ==================================================
    Uwaga:
    Co prawda jeszcze nie mówiłem, że ten mój kod w ASM vs. C ma automatyczne
    odliczanie najmniejszej wartości KMIN,
    w celu zmniejszenia rozmiaru tablicy zliczającej.
    Ale to myślę, że jakieś 5-15% szybkości może zabrać w ASM.

    Bardzo dziękuję Janusz.
    Podaj proszę jeszcze typ kompilatora, wersję i może jakiegoś linka do tego
    AVRSTUDIO i kompilatora (demo?)
    Może się komuś przyda.
    S.

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: