eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikaAVR i inne 8-bitowce a modyfikacja zmiennych globalnych w przerwaniach › Re: AVR i inne 8-bitowce a modyfikacja zmiennych globalnych w przerwaniach
  • Path: news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!.P
    OSTED!not-for-mail
    From: "Grzegorz Niemirowski" <g...@p...onet.pl>
    Newsgroups: pl.misc.elektronika
    Subject: Re: AVR i inne 8-bitowce a modyfikacja zmiennych globalnych w przerwaniach
    Date: Tue, 14 Oct 2014 22:39:10 +0200
    Organization: ATMAN - ATM S.A.
    Lines: 30
    Message-ID: <m1k1lf$anj$1@node2.news.atman.pl>
    References: <m1k10q$a38$1@node2.news.atman.pl>
    NNTP-Posting-Host: 031011139062.warszawa.vectranet.pl
    Mime-Version: 1.0
    Content-Type: text/plain; format=flowed; charset="UTF-8"; reply-type=response
    Content-Transfer-Encoding: 8bit
    X-Trace: node2.news.atman.pl 1413319151 10995 31.11.139.62 (14 Oct 2014 20:39:11 GMT)
    X-Complaints-To: u...@a...pl
    NNTP-Posting-Date: Tue, 14 Oct 2014 20:39:11 +0000 (UTC)
    X-Priority: 3
    X-MSMail-Priority: Normal
    X-Newsreader: OE PowerTool 4.5
    X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.6157
    X-WWW: http://www.grzegorz.net/
    Xref: news-archive.icm.edu.pl pl.misc.elektronika:672683
    [ ukryj nagłówki ]

    Jakub Rakus <s...@o...pl> napisał(a):
    > Dawno już nie robiłem nic na 8-bitowcach i chyba mi coś umknęło, a w
    > październikowej EP na str. 26 przeczytałem co następuje:
    > "(...)zmienne wyniku pomiaru są współdzielone między pętlą główną a
    > przerwaniem, a jak wiadomo, w przypadku 8-bitowego mikrokontrolera oraz
    > zmiennych większych niż jeden bajt, sytuacja taka może prowadzić do złej
    > interpretacji wartości zmiennej, jeśli się odpowiednio nie zabezpieczymy."
    > Czy mógłby ktoś wyklarować dlaczego, jak i po co? Jakie zabezpieczenie?
    > Coś kojarzę, że miałem dawno temu z tym jakieś problemy, bo między main()
    > a ISR() wymieniałem zmienną typu uint32_t i pojawiały się w niej jakiejś
    > bzdety, ale już nie pamiętam co wtedy zaradziłem.

    Na tych mikrokontrolerach operacje na zmiennych większych niż 8-bitowe nie
    są atomowe. Przykładowo dekrementujesz sobie 16-bitową zmienną w przerwaniu,
    a w głównym programie masz pętlę sprawdzającą, czy zmienna ta osiągnęła
    zero. Może się zdarzyć, że zmienna ta będzie miała wartość 0x0100 i wtedy:
    - główny kod sprawdzi młodszy bajt i stwierdzi jego równość zeru
    - nastąpi przerwanie, które zmieni wartość zmiennej na 0x00ff
    - główny kod sprawdzi starszy bajt i stwierdzi jego równość zeru
    - główny kod stwierdzi, że zmienna ma wartość 0x0000, choć nie będzie to
    prawdą
    Dlatego stosujemy sekcje krytyczne. Kłania się np. makro ATOMIC_BLOCK, które
    wyłącza przerwania na czas wykonywania sekcji.

    --
    Grzegorz Niemirowski
    http://www.grzegorz.net/
    OE PowerTool i Outlook Express: http://www.grzegorz.net/oe/
    Uptime: 15 days, 2 hours, 38 minutes and 10 seconds

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: