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!news.gazeta.pl!newsfeed.pionier.net.pl!news.nask.pl!new
    s.nask.org.pl!feed.news.interia.pl!not-for-mail
    From: J.F. <j...@p...onet.pl>
    Newsgroups: pl.misc.elektronika
    Subject: Re: Problem lekko OT, ale w WinAVR ;-)
    Date: Sat, 13 Jun 2009 09:44:28 +0200
    Organization: -
    Lines: 42
    Message-ID: <r...@4...com>
    References: <h0qku7$a6o$1@atlantis.news.neostrada.pl>
    <h0ud45$219$1@atlantis.news.neostrada.pl> <h0udur$2j2d$1@news.mm.pl>
    <h0v0bq$jmg$1@nemesis.news.neostrada.pl>
    NNTP-Posting-Host: h82-143-187-50-static.e-wro.net.pl
    Mime-Version: 1.0
    Content-Type: text/plain; charset=ISO-8859-2
    Content-Transfer-Encoding: 8bit
    X-Trace: news.interia.pl 1244877998 1254 82.143.187.50 (13 Jun 2009 07:26:38 GMT)
    X-Complaints-To: u...@n...interia.pl
    NNTP-Posting-Date: Sat, 13 Jun 2009 07:26:38 +0000 (UTC)
    X-Newsreader: Forte Agent 1.93/32.576 English (American)
    X-Authenticated-User: jjjfox % interia+pl
    Xref: news-archive.icm.edu.pl pl.misc.elektronika:565318
    [ ukryj nagłówki ]

    On Sat, 13 Jun 2009 03:35:54 +0200, Grzegorz Kurczyk wrote:
    >Pamiętam, że jakaś starsza wersja (chyba z 2006) kompilowała to bez
    >przestawiania. Funkcja jest z biblioteki, którą napisałem dawno temu i
    >sprawdzałem kod wynikowy. W wersji WinAVR20090313 faktycznie pomogło
    >volatile przy definicji wskaźnika int *pEncoderValue. Zaskoczyło mnie,
    >że volatile może być tu przydatne, bo jednak bardziej służy ono do
    >lokalnego wyłączenia optymalizacji dotyczącej danej zmiennej, a nie do
    >zmiany kolejności operacji nie mających nic wspólnego z tą zmienną.

    Volatile nie sluzy do optymalizowania, tylko mowi kompilatorowi ze
    zmienna moze sie zmienic w dowolnym momencie. W zwiazku z czym nie
    wolno mu optymalizowac kodu zakladajac ze sie nie zmienia.

    Bo jak zalozyc ze nie zmienia sie w przerwaniach/samoczynnie, to
    kompilator moze przeprowadzic bardzo gleboka optymalizacje - np
    zalozyc ze zmienna jest zawsze 0 i zlikwidowac caly program.

    >Z drugiej strony taka zmiana sekwencji rozkazów sterujących przez
    >kompilator wydaje mi się trochę dziwna, bo w pewnych sytuacjach ma ona
    >wpływ na wartość obliczeń

    Programisci sa przed tym wyraznie ostrzegani, ze program moze to
    zrobic, i maja stosownie pisac program.
    Albo rybki albo akwarium - albo efektywny program, albo robiacy
    dokladnie to co programista zapisal :-)

    >(właśnie aby tego uniknąć blokowałem
    >przerwania). Idąc tym tropem kompilator mógłby "dojść do wniosku", że
    >sekwencję:
    >sbi(PORTB, 1);
    >sbi(PORTB, 2);
    >sbi(PORTB, 3);
    >można zamienić na:
    >sbi(PORTB, 3);
    >sbi(PORTB, 2);
    >sbi(PORTB, 1);

    Tak to nie, bo to jednak i operacja specjalna i taka "wyjsciowa",
    ale juz kolejnosc odczytow z portow moglby przestawic.

    J.

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: