eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikaProblem lekko OT, ale w WinAVR ;-)Re: Problem lekko OT, ale w WinAVR ;-)
  • Data: 2009-06-12 09:05:51
    Temat: Re: Problem lekko OT, ale w WinAVR ;-)
    Od: Grzegorz Kurczyk <g...@c...slupsk.pl> szukaj wiadomości tego autora
    [ pokaż wszystkie 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: