eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikaC vs. ASM na przykładzie PIC18F
Ilość wypowiedzi w tym wątku: 58

  • 11. Data: 2014-04-05 11:10:49
    Temat: Odp: C vs. ASM na przykładzie PIC18F
    Od: Sylwester Łazar <i...@a...pl>

    > Natomiast ja bardzo chętnie chciałbym takie zadanie zobaczyć napisane
    > przez Ciebie w asm, o które proszę już od pół roku, założenia do
    > kodu:
    > - obsługa pendrive usb
    > - obsługa vfat
    > - sortowanie 5000 liczb ze wskazanego pliku
    > - sensowny czas wykonania (krótki timetomarket) - powiedzmy tydzień
    >
    > Na marginesie, do czego sensownego może się akurat przydać sortowanie
    > w 8bitowym mcu 5000 liczb... pachnie mi to znowu jak nieekonomiczne
    > użycie mcu do realizacji danego zadania.
    W tym poście mamy:
    2) ciągłą próbę narzucenia komuś pracy za darmo z perspektywą nagrody w
    postaci potępienia.
    3) wysnucie SWOJEGO pomysłu, narzucanie go INNEMU, a potem potępienie za
    głupotę.

    ad.2)
    Już Ci napisałem delikatnie, że musisz o to POPROSIĆ.
    Nie wiem jak się to rozumie w Twoim środowisku, ale Ty napisałeś: Bardzo
    proszę.
    No to chyba dodam, że musisz jeszcze za to zapłacić, bo uważasz, że to
    trudne dla Ciebie.
    Więc jeżeli Cię stać, to złóż w końcu tę ofertę.
    Ja nie tworzę zazwyczaj dobrego kodu dla studentów na życzenie.
    Pisanie w asm nie jest dla każdego.
    Jeśli nie umiesz - musisz płacić.
    Ja mam na utrzymaniu rodzinę i nie mogę sobie pozwolić na poświęcenie 1
    tygodnia na to tylko, żeby udowodnić,
    że umiem zrobić coś co 10 lat temu już zostało zrobione.
    ad. 3) Jakbyś przeczytał mój post, a w szczególności nagłówek do procedury w
    asm,
    masz tam napisaną uwagę co do rozsądności tej procedury na procesory
    8-bitowe.
    No, ale Ty nawet nie zajrzałeś do kodu w asm.
    Oj nieładnie...
    S.


  • 12. Data: 2014-04-05 11:34:19
    Temat: Re: C vs. ASM na przykładzie PIC18F
    Od: Michał Lankosz <m...@t...pl>

    W dniu 2014-04-05 11:10, jacek pozniak pisze:
    > 4. AVR-GCC na atmega32 -O2 (nie znam jeszcze dokładnie avr-gcc i jego opcji)
    > 376 ROM, 37 RAM

    Nie znam kompilatorów PICowych, ale dla AVR-GCC zamiast -O2 daj -Os i
    napisz wyniki. No i która to wersja gcc?

    --
    Michał


  • 13. Data: 2014-04-05 11:43:14
    Temat: Re: C vs. ASM na przykładzie PIC18F
    Od: jacek pozniak <j...@f...pl>

    Michał Lankosz wrote:

    > W dniu 2014-04-05 11:10, jacek pozniak pisze:
    >> 4. AVR-GCC na atmega32 -O2 (nie znam jeszcze dokładnie avr-gcc i jego
    >> opcji) 376 ROM, 37 RAM
    >
    > Nie znam kompilatorów PICowych, ale dla AVR-GCC zamiast -O2 daj -Os i
    > napisz wyniki. No i która to wersja gcc?
    >
    skrypt:
    avr-gcc -Wall -Os -mmcu=atmega32 -c main5.c
    avr-gcc -Wall -Os -mmcu=atmega32 -o main5.bin main5.o
    avr-objcopy -j .text -j .data -O ihex main5.bin main5.hex
    avr-objdump -S main5.bin > main5.lst
    avr-size main5.bin

    wynik:

    text data bss dec hex filename
    376 2 35 413 19d main5.bin


    avr-gcc (GCC) 4.3.4

    jp


  • 14. Data: 2014-04-05 11:49:07
    Temat: Odp: C vs. ASM na przykładzie PIC18F
    Od: Sylwester Łazar <i...@a...pl>

    > 1. Kompilator HiTech 8.05PL2 -O -Zg, procesor pic16f876A:
    > 149 words(słów, nie bajtów) ROM, 38 bytes RAM
    > bez funkcji zlicz(), odpowiednio 54 słów ROM, 35 RAM
    >
    > 2. Kompilator HiTech 9.63PL2 --opt=ALL , procesor pic18f252:
    > 284 bytes ROM, 37 RAM
    > bez funkcji zlicz(),75 bytes ROM, 15 bytes RAM
    >
    > 3. Kompilator XC8, ver 1.3 --opt=ALL (60-dniowa) procesor pic18f252: nie
    > wiem do końca, ćzy jest właczone MODE PRO niby w ciągu 60 dni powinno być
    > właczone ale coś kod zbyt duży wychodzi):
    > 606 bytes ROM, 43 RAM
    > bez funkcji zlicz() 160 ROM, 35 RAM
    >
    > 4. AVR-GCC na atmega32 -O2 (nie znam jeszcze dokładnie avr-gcc i jego
    opcji)
    > 376 ROM, 37 RAM
    > bez funkcji zlicz() 222 ROM, 37 RAM
    >
    > Wśród PICów jaki widać zwycięzcą jest 8.05 na PIC16.
    >
    > jp
    Dzięki.
    Mam mieszane uczucia.
    Napracowałeś się, przekompilowałeś i mamy fajne dane.
    Teraz tak.
    Ten PIC, który wybrałeś dla pkt.1 to 16F, a nie 18F.
    Różnica jest taka, że on ma 14bitów długość rozkazu, więc tam w bajtach nie
    mozna porównywać.
    Słusznie napisałeś, że po kompilacji ma 149 _słów_.
    Mój w ASM ma 71 słów na 18F.
    na 16F miałby o 10 słów więcej, gdyż 16F nie ma rozkazów LFSR,MOVFF i NEGF.
    Czyli 81 słów vs. 149 słów, czyli współczynnik C/ASM=1,8.

    Całkiem nieźle, jeśli chodzi o nadmiarowość kodu.
    Jednak jak powiedziałem - nie mierzyłem czasu, więc nie są te badania
    obiektywne,
    co do czasu wykonywania.
    Ja podałem ok. 6x wolniejszy, ale to tylko szacunek.
    Podaj może ilość rozkazów w głównej pętli sortującej, lub umieść kod to
    policzymy.
    S.


  • 15. Data: 2014-04-05 12:28:08
    Temat: Re: Odp: C vs. ASM na przykładzie PIC18F
    Od: Marek <f...@f...com>

    On Sat, 5 Apr 2014 11:10:49 +0200, Sylwester Łazar<i...@a...pl>
    wrote:
    > 3) wysnucie SWOJEGO pomysłu, narzucanie go INNEMU, a potem
    potępienie za
    > głupotę.

    Nie wiem skąd takie wnioski wyciągasz, nic bardziej mylnego.


    > Już Ci napisałem delikatnie, że musisz o to POPROSIĆ.

    Słowo "proszę" padało z mojej strony za każdym razem. Nie wiem, mam
    paść na kolana albo kupić kwiaty? ;) Naprawdę jestem ciekaw ile czasu
    Ci to zajmie, jakie problemy będziesz miał podczas implementacji i
    jak sobie z nimi poradzisz i jakie wnioski wyciągniesz po realizacji
    projektu. Uważam, że jest to bardzo świetny pomysł na pewien proof
    of concept zrealizowany w asm. Jako programista asm, krytukujący
    (całkiem sensownie zresztą) wady kompilatory języków "wyższego
    poziomu" powinieneś dać przykład realizacją właśnie takiego projektu.
    A Ty zamiast rzetelnej dyskusji robisz za każdym razem focha,
    propozycję odbierasz jako podpuszczanie a nawet atak, z góry
    zakaładając, że chce Cię wprowadzić na jakaś minę. A uwagi typu
    "musisz mi za to zapłacić" w czasach powszechnego i modnego "open
    source'a" uważam za słabe, nie wspominając zupełnie o tym, że to
    klasyczny unik typu "nie bo nie", "chciałbyś", "musisz o to
    poprosić", "nie będę zajmował się pierdołami" itp.

    --
    Marek


  • 16. Data: 2014-04-05 12:42:04
    Temat: Odp: C vs. ASM na przykładzie PIC18F
    Od: Sylwester Łazar <i...@a...pl>

    > 5) Po włączeniu optymalizacji "Enable on" kod zmniejszył się do 342 bajtów
    > i w ten sposób współczynnik ilości bajtów C vs. ASM wyniósł: 2,67.
    > Główna pętla zwiększyła się ze 121instrukcji na 182!
    > Przypominam: w asm 20 instrukcji.
    > Możliwe, że ma to swoje umotywowanie czasowe, ale trudno mi sobie je
    > wytłumaczyć,
    > skoro da się to ze spokojem przeprowadzić w 20 instrukcjach, a niech
    będzie,
    > że i w 40,
    > jeśli jakiś student by się pokusił o nieoptymalne napisanie kodu.
    > Ale 182 to już gruba przesada.
    Tutaj muszę sprostować.
    Oczywiście 182 bajty. Nie instrukcje.
    No i dodatkowo okazało się, że jest jeszcze więcej, bo coś około 218 bajtów
    W każdym razie, w poniższej pętli jest zawartych 94 instrukcji ASM 18F,
    co odpowiada 20 instrukcjom w kodzie pisanym bezpośrednio w ASM.

    for(i = n-1 ; i >= 0 ; --i)
    {
    j=--LICZV[VDIOD[i]]; // aktualizacja LICZV
    VDOUT[j] = VDIOD[i]; //wstawienie elementu na odpowiednią pozycję
    ADRDOUT[j][0] = ADRDIOD[i][0]; // sortowanie adresów
    ADRDOUT[j][1] = ADRDIOD[i][1]; // sortowanie adresów
    }

    Przepraszam, za pomyłkę.
    S.


  • 17. Data: 2014-04-05 12:42:30
    Temat: Re: Odp: C vs. ASM na przykładzie PIC18F
    Od: jacek pozniak <j...@f...pl>

    Sylwester Łazar wrote:

    >> 1. Kompilator HiTech 8.05PL2 -O -Zg, procesor pic16f876A:
    >> 149 words(słów, nie bajtów) ROM, 38 bytes RAM
    >> bez funkcji zlicz(), odpowiednio 54 słów ROM, 35 RAM
    >>
    > Słusznie napisałeś, że po kompilacji ma 149 _słów_.
    > Mój w ASM ma 71 słów na 18F.
    > na 16F miałby o 10 słów więcej, gdyż 16F nie ma rozkazów LFSR,MOVFF i
    > NEGF. Czyli 81 słów vs. 149 słów, czyli współczynnik C/ASM=1,8.
    >
    Podaj proszę ile ma Twoja funkcja zlicz() w ASM napisana, ponieważ podałem
    wynik kompilacji z i bez niej. Kompilator pewnie dorzuca jakiś extra kod
    jako startup.obj.

    > Całkiem nieźle, jeśli chodzi o nadmiarowość kodu.
    > Jednak jak powiedziałem - nie mierzyłem czasu, więc nie są te badania
    > obiektywne,
    > co do czasu wykonywania.
    > Ja podałem ok. 6x wolniejszy, ale to tylko szacunek.
    > Podaj może ilość rozkazów w głównej pętli sortującej, lub umieść kod to
    > policzymy.
    > S.
    Ja jedynie mogę wklaić wynik kompilacji z opcją -S:
    global ?a_zlicz
    global _ADRDIOD
    global _ADRDOUT
    global _LICZV
    global _VDIOD
    global _VDOUT
    global _k
    global _main
    signat _main,88
    FNCALL _main,_zlicz
    global _n
    global _zlicz
    signat _zlicz,88
    FNSIZE _zlicz,2,0
    global clear_bank0
    global start
    global used_btemp0
    processor 16F876A
    psect __Z08170RS_,global
    psect text0,local,class=CODE,delta=2
    psect text1,local,class=CODE,delta=2
    psect strings,global,class=STRING,delta=2
    psect const1,local,class=CONST,delta=2
    psect const2,local,class=CONST,delta=2
    psect rbss_0,global,class=BANK0,space=1
    psect temp,global,ovrld,class=BANK0,space=1
    file "C:\users\jacek\Temp\_8.AAB"


    psect __Z08170RS_

    psect text0
    _main
    ;main5.c: 16: VDIOD[0]=1;
    bcf 3,5
    bcf 3,6 ;carry unused
    clrf _VDIOD
    incf _VDIOD
    ;main5.c: 17: VDIOD[1]=2;
    movlw 2
    movwf _VDIOD+1
    ;main5.c: 18: VDIOD[2]=6;
    movlw 6
    movwf _VDIOD+2
    ;main5.c: 19: VDIOD[3]=4;
    movlw 4
    movwf _VDIOD+3
    ;main5.c: 20: VDIOD[4]=3;
    movlw 3
    movwf _VDIOD+4
    ;main5.c: 21: ADRDIOD[0][0]=1;
    clrf _ADRDIOD
    incf _ADRDIOD
    ;main5.c: 22: ADRDIOD[0][1]=0;
    clrf _ADRDIOD+1
    ;main5.c: 23: ADRDIOD[1][0]=1;
    clrf _ADRDIOD+2
    incf _ADRDIOD+2
    ;main5.c: 24: ADRDIOD[1][1]=1;
    clrf _ADRDIOD+3
    incf _ADRDIOD+3
    ;main5.c: 25: ADRDIOD[2][0]=1;
    clrf _ADRDIOD+4
    incf _ADRDIOD+4
    ;main5.c: 26: ADRDIOD[2][1]=2;
    movlw 2
    movwf _ADRDIOD+5
    ;main5.c: 27: ADRDIOD[3][0]=2;
    movwf _ADRDIOD+6
    ;main5.c: 28: ADRDIOD[3][1]=0;
    clrf _ADRDIOD+7
    ;main5.c: 29: ADRDIOD[4][0]=2;
    movwf _ADRDIOD+8
    ;main5.c: 30: ADRDIOD[4][1]=1;
    clrf _ADRDIOD+9
    incf _ADRDIOD+9
    ;main5.c: 32: zlicz();
    fcall _zlicz
    ;main5.c: 35: }
    ljmp start

    psect text1
    _zlicz
    ; _j assigned to ?a_zlicz+0
    _zlicz$j set ?a_zlicz
    ; _i assigned to ?a_zlicz+1
    _zlicz$i set ?a_zlicz+1
    ;main5.c: 38: char i;
    clrf 3 ;select bank 0
    clrf ?a_zlicz+1
    goto l6
    l3
    movf ?a_zlicz+1,w
    addlw _LICZV
    movwf 4
    bcf 3,7
    clrf 0
    incf ?a_zlicz+1
    l6
    movlw 7
    subwf ?a_zlicz+1,w
    btfss 3,0
    goto l3
    ;main5.c: 42: for(i=0;i<n;++i) ++LICZV[VDIOD[i]];
    clrf ?a_zlicz+1
    l10
    movlw 5
    subwf ?a_zlicz+1,w
    btfsc 3,0
    goto l8
    movf ?a_zlicz+1,w
    addlw _VDIOD
    movwf 4
    bcf 3,7
    movf 0,w
    addlw _LICZV
    movwf 4
    incf 0
    incf ?a_zlicz+1
    goto l10
    l8
    ;main5.c: 43: for(i=1;i<k;++i) LICZV[i]+=LICZV[i-1];
    clrf ?a_zlicz+1
    L1
    incf ?a_zlicz+1
    movlw 7
    subwf ?a_zlicz+1,w
    btfsc 3,0
    goto l12
    decf ?a_zlicz+1,w
    addlw _LICZV
    movwf 4
    bcf 3,7
    movf 0,w
    movwf btemp
    movf ?a_zlicz+1,w
    addlw _LICZV
    movwf 4
    movf btemp,w
    addwf 0
    goto L1
    l12
    ;main5.c: 44: for(i = n-1 ; i >= 0 ; --i)
    movlw 4
    movwf ?a_zlicz+1
    l15
    ;main5.c: 45: {
    ;main5.c: 46: j=--LICZV[VDIOD[i]];
    movf ?a_zlicz+1,w
    addlw _VDIOD
    movwf 4
    bcf 3,7
    movf 0,w
    addlw _LICZV
    movwf 4
    decf 0
    movf 0,w
    movwf ?a_zlicz
    ;main5.c: 47: VDOUT[j] = VDIOD[i];
    movf ?a_zlicz+1,w
    addlw _VDIOD
    movwf 4
    movf 0,w
    movwf btemp
    movf ?a_zlicz,w
    addlw _VDOUT
    movwf 4
    movf btemp,w
    movwf 0
    ;main5.c: 48: ADRDOUT[j][0]=ADRDIOD[i][0];
    movf ?a_zlicz+1,w
    addwf ?a_zlicz+1,w
    addlw _ADRDIOD
    movwf 4
    movf 0,w
    movwf btemp
    movf ?a_zlicz,w
    addwf ?a_zlicz,w
    addlw _ADRDOUT
    movwf 4
    movf btemp,w
    movwf 0
    ;main5.c: 49: ADRDOUT[j][1]=ADRDIOD[i][1];
    bsf 3,0
    rlf ?a_zlicz+1,w
    addlw _ADRDIOD
    movwf 4
    movf 0,w
    movwf btemp
    bsf 3,0
    rlf ?a_zlicz,w
    addlw _ADRDOUT
    movwf 4
    movf btemp,w
    movwf 0
    ;main5.c: 50: }
    decf ?a_zlicz+1
    goto l15

    psect const1
    addwf 2
    _k
    retlw 7

    psect const2
    addwf 2
    _n
    retlw 5

    psect rbss_0
    _LICZV
    ds 5
    _VDIOD
    ds 5
    _VDOUT
    ds 5
    _ADRDIOD
    ds 10
    _ADRDOUT
    ds 10

    psect temp
    btemp
    ds 1


  • 18. Data: 2014-04-05 12:48:18
    Temat: Odp: Odp: C vs. ASM na przykładzie PIC18F
    Od: Sylwester Łazar <i...@a...pl>

    > "musisz mi za to zapłacić" w czasach powszechnego i modnego "open
    > source'a" uważam za słabe, nie wspominając zupełnie o tym, że to
    > klasyczny unik typu "nie bo nie", "chciałbyś", "musisz o to
    > poprosić", "nie będę zajmował się pierdołami" itp.
    >
    > --
    > Marek
    Ja tylko napisałem: "musisz o to poprosić"
    Te słowa:
    "nie bo nie", "chciałbyś", oraz "nie będę zajmował się pierdołami" itp.
    siedzą w Twojej głowie.

    Ale nie chcem z Tobą dyskutować.
    Nie, że to bezowocne, bo zauważam, że starasz się być obiektywny, ale
    po prostu Ty nie zrobiłęś takiego porównania, poświęcając swój czas i
    pisząc:
    a) w ASM
    b) w C

    Ja to zrobiłem, wyciągnąłem wnioski i podzieliłem się FAKTAMI.

    I to masz za darmo. Myślę, że to przyda się innym, a może i Tobie.
    Jeśli uważasz, że test który zrobiłem jest głupi, no to mi przykro,
    ale nie będę nad tym ubolewał.
    S.


  • 19. Data: 2014-04-05 12:52:19
    Temat: Re: C vs. ASM na przykładzie PIC18F
    Od: Marek <f...@f...com>

    On Sat, 05 Apr 2014 11:10:32 +0200, jacek pozniak
    <j...@f...pl> wrote:
    > To ja podam wyniki kompilacji Twojego kodu:

    Mam wrażenie, że testujący założyli, że proponowany kod w C został
    napisany maksymalnie optymalnie albo kompilator niczym wróżka wywróży
    sobie co autor chciał zrobić i wygeneruje do tego jak najbardziej
    krótki kod :-). Pomijam zupełnie, że kompilujecie "pierdulamenty"
    (jakby powiedział Stachu) przez co programiści w asm mogli używać to
    jako argument za wyższością asm nad C.

    --
    Marek


  • 20. Data: 2014-04-05 13:03:11
    Temat: Odp: Odp: C vs. ASM na przykładzie PIC18F
    Od: Sylwester Łazar <i...@a...pl>

    > Podaj proszę ile ma Twoja funkcja zlicz() w ASM napisana, ponieważ podałem
    > wynik kompilacji z i bez niej. Kompilator pewnie dorzuca jakiś extra kod
    > jako startup.obj.
    U mnie w programi pisanym w ASM liczba instrukcji wynosi: 57
    Instrukcje w głównej pętli sortującej: 20
    Są 4 pętle, ale chodzi o tę ostatnią.
    Wydaje mi się ona najtrudniejsza dla kompilatora.
    Ale w innych, jak w tej pierwszej - samo zerowanie też mój kompilator C18
    robi głupoty.

    A teraz postaram się znaleźć i policzyć instrukcje w głównej pętli
    sortującej, w tym co ogłosiłeś po kompilacji.

    S.

strony : 1 . [ 2 ] . 3 ... 6


Szukaj w grupach

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: