eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronika › winavr problemik
Ilość wypowiedzi w tym wątku: 7

  • 1. Data: 2010-08-19 03:53:56
    Temat: winavr problemik
    Od: "newxmega" <m...@m...mm>

    Mam dużo "swich" -ów lub
    if
    elsif
    elsif
    ..

    tak po kilkadziesiąt.

    Co tu zrobić żeby winavr używał indirect jumpów zamiast zamieniał swich na
    if wlsif.

    To bez sensu żeby robić
    cpi stała
    cpi stał

    i tak 60 razy.

    Mam małe procedurki, a indirecty by mi przyspieszyły kod.


  • 2. Data: 2010-08-19 06:19:33
    Temat: Re: winavr problemik
    Od: shg <s...@g...com>

    On 19 Sie, 05:53, "newxmega" <m...@m...mm> wrote:
    > Mam dużo "swich" -ów lub
    > if
    > elsif
    > elsif
    > ..
    >
    > tak po kilkadziesiąt.
    >
    > Co tu zrobić żeby winavr używał indirect jumpów zamiast zamieniał swich na
    > if wlsif.
    >
    > To bez sensu żeby robić
    > cpi stała
    > cpi stał
    >
    > i tak 60 razy.
    >
    > Mam małe procedurki, a indirecty by mi przyspieszyły kod.

    Tablice skoków są tworzone chyba tylko z bloków switch.
    Do tego wartości przy case muszą spełniać odpowiednie warunki, tzn.
    musi być ich dostatecznie dużo i muszą być ułożone po kolei (wartości
    jako zbiór, w kodzie już kolejność występowania jest dowolna).
    Jest gdzieś do tego jakaś reguła, ale nie jestem w stanie jej znaleźć.
    O ile pamiętam (ale to mogło być akurat w innym kompilatorze) to
    dopuszczalne są niewielkie dziury w wartościach, była na to jakaś
    matematyczna formułka, typu ilość wartości w jednym ciągu / szerokość
    zakresu > jakaś stała, do tego jeszcze musiała być odpowiednio duża
    ilość przypadków, ale to akurat u Ciebie nie jest problemem, to było
    raczej w okolicy 5. Jeżeli się zgadzało to switch był zamieniany na
    tablicę skoków.
    Coś znalazłem, może się przyda, nie za bardzo mam czas żeby
    przeczytać: http://ivoras.sharanet.org/papers/switch-complexity.
    pdf


  • 3. Data: 2010-08-19 18:30:54
    Temat: Re: winavr problemik
    Od: "newxmega" <m...@m...mm>


    "shg" <s...@g...com> wrote in message
    news:326a6b67-c203-477c-a397-26d198a23447@v8g2000yqe
    .googlegroups.com...

    >>Coś znalazłem, może się przyda, nie za bardzo mam czas żeby
    >>przeczytać: http://ivoras.sharanet.org/papers/switch-complexity.
    pdf

    Dzięki za odpowiedź :-)

    Wyczytałem, że muszę używać -O3 , a ja używam -O2 bo mi sie przestał mieścić
    kod w procku :-)
    W jaki sposób wymusić na winavr żeby używał -O3 dla danego fragmentu kodu
    lub dla danej funkcji?

    Zaraz to poćwiczę.


  • 4. Data: 2010-08-19 18:51:42
    Temat: Re: winavr problemik
    Od: "newxmega" <m...@m...mm>


    "shg" <s...@g...com> wrote in message
    news:326a6b67-c203-477c-a397-26d198a23447@v8g2000yqe
    .googlegroups.com...

    O zobacz.

    18: switch(SELECTXY)
    +0000184A: 3087 CPI R24,0x07 Compare with immediate
    +0000184B: F1C1 BREQ PC+0x39 Branch if equal
    +0000184C: 3088 CPI R24,0x08 Compare with immediate
    +0000184D: F470 BRCC PC+0x0F Branch if carry cleared
    +0000184E: 3083 CPI R24,0x03 Compare with immediate
    +0000184F: F141 BREQ PC+0x29 Branch if equal
    +00001850: 3084 CPI R24,0x04 Compare with immediate
    +00001851: F428 BRCC PC+0x06 Branch if carry cleared
    +00001852: 3081 CPI R24,0x01 Compare with immediate
    +00001853: F0F1 BREQ PC+0x1F Branch if equal
    +00001854: 3082 CPI R24,0x02 Compare with immediate
    +00001855: F4F8 BRCC PC+0x20 Branch if carry cleared
    +00001856: C018 RJMP PC+0x0019 Relative jump
    +00001857: 3085 CPI R24,0x05 Compare with immediate
    +00001858: F129 BREQ PC+0x26 Branch if equal
    +00001859: 3086 CPI R24,0x06 Compare with immediate
    +0000185A: F530 BRCC PC+0x27 Branch if carry cleared
    +0000185B: C01F RJMP PC+0x0020 Relative jump
    +0000185C: 308B CPI R24,0x0B Compare with immediate
    +0000185D: F1B9 BREQ PC+0x38 Branch if equal
    +0000185E: 308C CPI R24,0x0C Compare with immediate
    +0000185F: F428 BRCC PC+0x06 Branch if carry cleared
    +00001860: 3089 CPI R24,0x09 Compare with immediate
    +00001861: F141 BREQ PC+0x29 Branch if equal
    +00001862: 308A CPI R24,0x0A Compare with immediate
    +00001863: F560 BRCC PC+0x2D Branch if carry cleared
    +00001864: C022 RJMP PC+0x0023 Relative jump
    +00001865: 308D CPI R24,0x0D Compare with immediate
    +00001866: F1C9 BREQ PC+0x3A Branch if equal
    +00001867: 308D CPI R24,0x0D Compare with immediate
    +00001868: F1A0 BRCS PC+0x35 Branch if carry set
    +00001869: 308E CPI R24,0x0E Compare with immediate
    +0000186A: F1D1 BREQ PC+0x3B Branch if equal
    +0000186B: 308F CPI R24,0x0F Compare with immediate
    +0000186C: F1E9 BREQ PC+0x3E Branch if equal

    i tak dalej bez końca.


  • 5. Data: 2010-08-19 19:11:38
    Temat: Re: winavr problemik
    Od: Zbych <a...@o...pl>

    newxmega pisze:

    > Co tu zrobić żeby winavr używał indirect jumpów zamiast zamieniał swich na if
    wlsif.

    Jak ilość kodu w blokach warunkowych nie jest za mała, to możesz sobie
    zrobić ręcznie tablicę z adresami funkcji.

    > Wyczytałem, że muszę używać -O3 , a ja używam -O2 bo mi sie przestał
    > mieścić kod w procku :-)

    a próbowałeś -Os?

    > W jaki sposób wymusić na winavr żeby używał -O3 dla danego fragmentu
    > kodu lub dla danej funkcji?

    dodaj atrybut optimize.


  • 6. Data: 2010-08-19 19:36:33
    Temat: Re: winavr problemik
    Od: "newxmega" <m...@m...mm>


    "Zbych" <a...@o...pl> wrote in message news:i4jvor$1tb2$1@news.mm.pl...

    >
    > dodaj atrybut optimize.

    ale jaki jest syntax ?

    __attribute__((optimize("O3"))) nie kompiluje się.

    char dupa(char) __attribute__((optimize("O3"))) {

    }

    ?


  • 7. Data: 2010-08-19 19:53:41
    Temat: Re: winavr problemik
    Od: "newxmega" <m...@m...mm>


    "newxmega" <m...@m...mm> wrote in message news:i4k13r$p2c$1@opal.futuro.pl...
    No dobra już wiem :-)

    __attribute__ ma być przed funkcją, a nie za :-)
    No teraz pięknie :-) działa i kompiluje jak należy :-)



strony : [ 1 ]


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: