-
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
- Dlaczego energia elektryczna jest droga i cały czas drożeje
- twardy dysk stuka
- Oclenie alkalicznych akumulatorów
- Powerbank jednonapieciowy, a trzynapieciowy
- Lustra w maszynie ASML
- DC blocker i buczące toroidy
- Problemy TSMC cd
- Detektor
- Może tutaj się uda: [NTG] Elewacja / dziurawa Churka
- Falownik jednofazowy a żarówka
- Agregat i "legalność" instalacji
- Uziom
- (Ponownie) odkryto, że ładowanie pulsacyjne robi dobrze
- driver led ?
- Długość wtyku zasilającego ?5.5mm
Najnowsze wątki
- 2024-05-03 Warszawa => Sprzedawca usług rekrutacyjnych <=
- 2024-05-03 Warszawa => Mid/Senior QA Engineer <=
- 2024-05-03 Warszawa => Mid/Senior QA Engineer <=
- 2024-05-03 Warszawa => Senior PHP Developer (Symfony) <=
- 2024-05-03 Rzeszów => UX/UI Designer <=
- 2024-05-03 Giertych przetarł szlak: byli członkowie zarządu Orlenu śledztwa prokuratorskie obserwują z zagranicy
- 2024-05-03 Warszawa => Senior Rust Software Engineer <=
- 2024-05-03 Kraków => UX/UI Designer <=
- 2024-05-03 Warszawa => International freight forwarder <=
- 2024-05-02 Silnik Stirlinga - energia mechaniczna wytwarzana z ciepła bez dostarczania paliwa!
- 2024-05-02 Kraków => Senior .Net Programmer <=
- 2024-05-02 Sprowadzenie pożaru zagrażającego mieniu w wielkich rozmiarch
- 2024-05-02 Zielona Góra => Spedytor międzynarodowy <=
- 2024-05-02 Katowice => Performance Analyst <=
- 2024-05-02 Gdańsk => Full Stack web developer (obszar .Net Core, Angular6+) <=