eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikaProblem lekko OT, ale w WinAVR ;-) › Re: Problem lekko OT, ale w WinAVR ;-)
  • Path: news-archive.icm.edu.pl!newsfeed.gazeta.pl!wsisiz.edu.pl!newsfeed.neostrada.pl!
    atlantis.news.neostrada.pl!news.neostrada.pl!not-for-mail
    From: Grzegorz Kurczyk <g...@c...slupsk.pl>
    Newsgroups: pl.misc.elektronika
    Subject: Re: Problem lekko OT, ale w WinAVR ;-)
    Date: Fri, 12 Jun 2009 11:05:51 +0200
    Organization: TP - http://www.tp.pl/
    Lines: 57
    Message-ID: <h0t6bg$36s$1@nemesis.news.neostrada.pl>
    References: <h0qku7$a6o$1@atlantis.news.neostrada.pl>
    <h0r3ok$c87$1@atlantis.news.neostrada.pl>
    <5...@4...com>
    <h0r8h1$fpo$1@nemesis.news.neostrada.pl> <h0rfu4$r83$1@news.mm.pl>
    <h0rjnq$etf$2@news.wp.pl> <h0rkmu$1ol$2@nemesis.news.neostrada.pl>
    <h0rkdf$4nb$2@news.mm.pl> <h0rti7$969$2@atlantis.news.neostrada.pl>
    <h0t1ob$o5f$1@atlantis.news.neostrada.pl>
    NNTP-Posting-Host: control.slupsk.pl
    Mime-Version: 1.0
    Content-Type: text/plain; charset=ISO-8859-2; format=flowed
    Content-Transfer-Encoding: 8bit
    X-Trace: nemesis.news.neostrada.pl 1244798128 3292 80.52.170.66 (12 Jun 2009 09:15:28
    GMT)
    X-Complaints-To: u...@n...neostrada.pl
    NNTP-Posting-Date: Fri, 12 Jun 2009 09:15:28 +0000 (UTC)
    User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; PL; rv:1.8.1.21) Gecko/20090403
    SeaMonkey/1.1.16
    In-Reply-To: <h0t1ob$o5f$1@atlantis.news.neostrada.pl>
    X-Antivirus: avast! (VPS 090611-0, 2009-06-11), Outbound message
    X-Antivirus-Status: Clean
    Xref: news-archive.icm.edu.pl pl.misc.elektronika:565236
    [ ukryj nagłówki ]

    Użytkownik Zbych napisał:
    > T.M.F. pisze:
    >
    >> No zagladam dosyc czesto przy okazji debuggowania tego co napisalem.
    >> Jakis koszmarnych brakow optymalizacji nie zauwazylem. Mozesz podac
    >> konkretny przyklad w C, ktory jest zle optymalizowany? To zawsze mozna
    >> zglosic jako bug.
    >
    > To zależy co kto uważa za koszmarne. Poniżej parę przykładów, ale
    > wątpię, żeby komuś chciało się to czytać.
    >
    > Wszystkie przykłady były optymalizowane na rozmiar.
    >
    >
    > ----------------------------------------------------
    -----
    > Testowanie warunków logicznych:
    >
    > #define PIN1_IS_LOW (!(PINB & (1<<PINB7)))
    > #define PIN2_IS_LOW (!(PINB & (1<<PINB6)))
    >
    > volatile uint8_t a;
    > asm volatile(";start");
    > a = (PIN1_IS_LOW || PIN2_IS_LOW);
    > asm volatile(";stop");
    >

    Ooooo to, to :-) W programach unikam operacji logicznych na bitach
    portów, bo wychodzą koszmarki. Czasem zamiast:

    if((PINB & (1<<7)) && (PINC & (1<<3))) {...}

    lepiej napisać

    if(PINB & (1<<7))
    if(PINC & (1<<3))
    {...}

    Z jakiś troszkę wcześniejszych wersji pamiętam, że samo wstawienie
    operatora ! na bicie portu automatycznie generowało koszmarek z rozkazem
    in i wyliczaniem stanu bitu na piechotę.

    if(PINB & (1<<7)) {...} wyglądało poprawnie z użyciem sbic/sbis,
    ale już:
    if(!(PINB & (1<<7))) {...} generowało wspomniany przez Kolegę koszmarek
    i w zastępstwie używałem:
    if(PINB & (1<<7)) else {...} i juz było cacy na sbic/sbis

    Co do adresowania tablic w pamięci FLASH w pętli to już od dawna stosuję
    wyłącznie inkrementację wskaźnika, bo te każdorazowe wyliczanie adresu
    też mnie biło w oczy :-)

    P.S. Używam trochę starawej wersji 20070525, bo sprawia mi najmniej
    problemów. Późniejsze wersje 2008xxxx sprawiły mi zbyt dużo psikusów i
    trochę się zraziłem. Choć może warto wypróbować jakąś świeżynkę :-)

    Pozdrawiam
    Grzegorz

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: