eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikaProblem lekko OT, ale w WinAVR ;-) › Re: Problem lekko OT, ale w WinAVR ;-)
  • Data: 2009-06-14 14:51:02
    Temat: Re: Problem lekko OT, ale w WinAVR ;-)
    Od: "T.M.F." <t...@n...mp.pl> szukaj wiadomości tego autora
    [ pokaż wszystkie 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: