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!news.onet.pl!newsfeed.neostrada.pl!a
    tlantis.news.neostrada.pl!news.neostrada.pl!not-for-mail
    From: "T.M.F." <t...@n...mp.pl>
    Newsgroups: pl.misc.elektronika
    Subject: Re: Problem lekko OT, ale w WinAVR ;-)
    Date: Sun, 14 Jun 2009 10:51:02 -0400
    Organization: TP - http://www.tp.pl/
    Lines: 25
    Message-ID: <h12dpj$5vq$1@atlantis.news.neostrada.pl>
    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>
    <h0vhtr$i32$1@atlantis.news.neostrada.pl>
    <h0voto$eke$1@nemesis.news.neostrada.pl>
    <h0vvnn$q5t$1@nemesis.news.neostrada.pl>
    <8...@4...com>
    <h101gv$s44$1@nemesis.news.neostrada.pl>
    <7...@4...com>
    <h103jc$1c4$1@nemesis.news.neostrada.pl>
    <6...@4...com>
    <h11av0$ivi$1@nemesis.news.neostrada.pl>
    Reply-To: t...@n...mp.pl
    NNTP-Posting-Host: dvi64.neoplus.adsl.tpnet.pl
    Mime-Version: 1.0
    Content-Type: text/plain; charset=ISO-8859-2; format=flowed
    Content-Transfer-Encoding: 8bit
    X-Trace: atlantis.news.neostrada.pl 1244969587 6138 83.22.42.64 (14 Jun 2009 08:53:07
    GMT)
    X-Complaints-To: u...@n...neostrada.pl
    NNTP-Posting-Date: Sun, 14 Jun 2009 08:53:07 +0000 (UTC)
    User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1b3pre) Gecko/20090513
    Fedora/3.0-2.3.beta2.fc11 Thunderbird/3.0b2
    In-Reply-To: <h11av0$ivi$1@nemesis.news.neostrada.pl>
    Xref: news-archive.icm.edu.pl pl.misc.elektronika:565379
    [ ukryj nagłówki ]

    > Tak jak wspomniałem moim celem było: nie dopuścić do przerwania
    > określonego fragmentu procedury przez inny wątek. To, że kompilator
    > pomiędzy cli/sei skopiuje sobie wartość zmiennej do rejestrów tylko raz
    > i będzie później banglał na tych rejestrach wcale mi nie przeszkadza,
    > więc jakoś nie widziałem w tym momencie miejsca na volatile, bo zmienna
    > w tej sekcji tak naprawdę wcale nie była ulotna.

    Alez byla. Twoja zmienna jest typu int, czyli ma 2 bajty. AVR nie ma
    instrukcji ladowania z pamieci 2 bajtow jednoczesnie, a wiec takie
    przeslanie nie jest atomowe. Dlatego musisz okreslic ta zmienna jako
    volatile i zapewnic atomowosc operacji przez blokowanie przerwan.
    Zauwaz, ze gdyby uzyte przeslanie 16-bitowe bylo atomowe to blokowanie
    przerwan w ogole nie byloby potrzebne. Tak jak pisalem, jesli tej
    zmiennej nie okreslisz jako volatile to kompilator slusznie umieszcza to
    przerwanie gdzie mu wygodniej - w koncu nie powiedziales mu, ze cos moze
    wartosc tej zmiennej pomiedzy przeslaniami zmienic.
    Zobacz tu:
    http://www.nongnu.org/avr-libc/user-manual/group__ut
    il__atomic.html
    wraz z wyjasnieniem i przykladami - powinno sie przydac.

    --
    Inteligentny dom - http://idom.wizzard.one.pl
    http://idom.sourceforge.net/
    Teraz takze forum dyskusyjne
    Zobacz, wyslij uwagi, dolacz do projektu.

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: