eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikaC vs. ASM na przykładzie PIC18FOdp: Odp: C vs. ASM na przykładzie PIC18F
  • Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.cyf-kr.edu.pl!news.nask
    .pl!news.nask.org.pl!news.internetia.pl!not-for-mail
    From: Sylwester Łazar <i...@a...pl>
    Newsgroups: pl.misc.elektronika
    Subject: Odp: Odp: C vs. ASM na przykładzie PIC18F
    Date: Sat, 5 Apr 2014 23:19:19 +0200
    Organization: Netia S.A.
    Lines: 96
    Message-ID: <lhpsr5$gbm$1@mx1.internetia.pl>
    References: <lhntl8$u3a$1@mx1.internetia.pl><533fc888$0$2155$6...@n...neostrada.
    pl> <op.xduo4pf8n0u1o8@moj><lhpasi$k7d$1@mx1.internetia.pl>
    <op.xdux200fn0u1o8@moj>
    NNTP-Posting-Host: 77-253-141-36.adsl.inetia.pl
    Mime-Version: 1.0
    Content-Type: text/plain; charset="UTF-8"
    Content-Transfer-Encoding: 8bit
    X-Trace: mx1.internetia.pl 1396733605 16758 77.253.141.36 (5 Apr 2014 21:33:25 GMT)
    X-Complaints-To: a...@i...pl
    NNTP-Posting-Date: Sat, 5 Apr 2014 21:33:25 +0000 (UTC)
    X-MimeOLE: Produced By Microsoft MimeOLE V5.00.2615.200
    X-Tech-Contact: u...@i...pl
    X-Newsreader: Microsoft Outlook Express 5.00.2615.200
    X-Priority: 3
    X-Server-Info: http://www.internetia.pl/
    X-MSMail-Priority: Normal
    Xref: news-archive.icm.edu.pl pl.misc.elektronika:662378
    [ ukryj 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: