-
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
Następne wpisy z tego wątku
- 14.10.14 22:42 platformowe głupki
- 14.10.14 23:17 Sebastian Biały
- 15.10.14 22:36 janusz_k
Najnowsze wątki z tej grupy
- pradnica krokowa
- Nieustający podziw...
- Coś dusi.
- akumulator napięcie 12.0v
- Podłączenie DMA 8257 do 8085
- pozew za naprawę sprzętu na youtube
- gasik
- Zbieranie danych przez www
- reverse engineering i dodawanie elementów do istniejących zamkniętych produktów- legalne?
- Problem z odczytem karty CF
- 74F vs 74HCT
- Newag ciąg dalszy
- Digikey, SN74CBT3253CD, FST3253, ktoś ma?
- Szukam: czujnik ruchu z możliwością zaączenia na stałe
- kabelek - kynar ?
Najnowsze wątki
- 2025-01-19 Test - nie czytać
- 2025-01-19 qqqq
- 2025-01-19 Tauron przysyła aneks
- 2025-01-19 Nowa ładowarka Moya a Twizy -)
- 2025-01-18 Power BANK z ładowaniem przelotowym robi PRZERWY
- 2025-01-18 Pomoc dla Filipa ;)
- 2025-01-18 znowu kradno i sie nie dzielo
- 2025-01-18 Zieloni oszuchiści
- 2025-01-18 Zielonka => Specjalista ds. public relations <=
- 2025-01-18 Warszawa => Frontend Developer (JS, React) <=
- 2025-01-18 Warszawa => Software .Net Developer <=
- 2025-01-18 Warszawa => Developer .NET (mid) <=
- 2025-01-18 Katowice => Administrator IT - Systemy Operacyjne i Wirtualizacja <=
- 2025-01-17 Zniknął list gończy za "Frogiem". Frog się nam odnalazł?
- 2025-01-17 Kto wytłumaczy "głupiemu" prezydentowi Dudzie wielką moc prawną "dekretu premiera" TUSKA? [(C)Korneluk (2025)]