-
Path: news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!.PO
STED!not-for-mail
From: Michoo <m...@v...pl>
Newsgroups: pl.misc.elektronika
Subject: Re: AVR ATmega, pomiar częstotliwości przebiegu, prośba o sprawdzenie
kodu
Date: Fri, 11 Feb 2011 12:43:23 +0100
Organization: http://onet.pl
Lines: 81
Message-ID: <ij37ck$4ug$1@news.onet.pl>
References: <4d528e6b$0$2436$65785112@news.neostrada.pl>
<4d52df8e$0$2452$65785112@news.neostrada.pl>
<4d53ffa7$0$2504$65785112@news.neostrada.pl>
<4d540151$0$2457$65785112@news.neostrada.pl> <ij1236$va6$1@news.onet.pl>
<4d543005$0$2448$65785112@news.neostrada.pl> <ij1leg$ciq$1@news.onet.pl>
<4d54e717$0$2460$65785112@news.neostrada.pl>
NNTP-Posting-Host: smaug.int.pl
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-2; format=flowed
Content-Transfer-Encoding: 8bit
X-Trace: news.onet.pl 1297424596 5072 83.238.197.12 (11 Feb 2011 11:43:16 GMT)
X-Complaints-To: n...@o...pl
NNTP-Posting-Date: Fri, 11 Feb 2011 11:43:16 +0000 (UTC)
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.16) Gecko/20101227
Icedove/3.0.11
In-Reply-To: <4d54e717$0$2460$65785112@news.neostrada.pl>
Xref: news-archive.icm.edu.pl pl.misc.elektronika:604667
[ ukryj nagłówki ]W dniu 11.02.2011 08:36, Zbych pisze:
> W dniu 2011-02-10 22:31, Michoo pisze:
>
>> Tylko jeżeli [coś] jest kiepskim kodem ;) - Używanie w sekcji krytycznej
>> czegoś co nie jest volatile i nie zawiera bariery na przesyłanej
>> zmiennej jest sprzeczne zarówno ze standardem jak i ze zdrowym
>> rozsądkiem.
>
> Pokaż mi gdzie jest to napisane w standardzie.
C++:
When the processing of the abstract machine is interrupted by receipt of
a signal, the values of objects with type other than volatile
sig_atomic_t are unspecified, and the value of any object not of
volatile sig_atomic_t that is modified by the handler becomes undefined.
Czyli przerzucanie program<->przerwanie czegoś innego niż "volatile
sig_atomic_t" w myśl standardu nie jest zdefiniowane. Ale jednocześnie:
Accessing an object designated by a volatile lvalue (3.10), modifying an
object, calling a library I/O function, or calling a function that does
any of those operations are all side effects, which are changes in the
state of the execution environment. Evaluation of an expression might
produce side effects. At certain specified points in the execution
sequence called sequence points, all side effects of previous
evaluations shall be complete and no side effects of subsequent
evaluations shall have taken place.)
W związku z tym gcc/g++ daje gwarancję na prawidłowe przekazanie
obiektów volatile.
http://gcc.gnu.org/onlinedocs/gcc/Volatiles.html
> Ja wtykanie volatile
> wszędzie gdzie się da uważam co najmniej za lenistwo.
Ja za błąd w sztuce - nie dość, że optymalizacje psuje to jeszcze
wprowadza bardzo trudne do wykrycia błędy (przesyłanie wielobajtowych
obiektów volatile bez synchronizacji a jedynie licząc, że samo volatile
wystarczy) Niemniej *nie oznaczenie* obiektu przekazywanego jako
volatile to już lampka ostrzegawcza, bo trzeba dodatkowo pamiętać o
barierach.
> Jak już muszę użyć
> to często robię unię zmiennej volatile i bez volatile. Dzięki czemu nie
> mam nadmiarowego kodu np. w przerwaniach.
Ja zazwyczaj używam volatile do samego przekazania i osobne zmienne "po
obu stronach" albo nie daję volatile i pamiętam o synchronizacji ;)
> Musisz przejrzeć daty w okolicach dodania makr
> ATOMIC do biblioteki. Te makra powstały właśnie po tym jak ludzie
> zaczęli zgłaszać błędy związane przenoszeniem operacji poza blok
> cli()-sei().
Ok, będę miał chwilę to poszukam.
>>>> Dziwne swoją drogą, że nie jest to zapisane na wszelki wypadek jako
>>>> # define sei() __asm__ __volatile__ ("sei" :::"memory")
>>>
>>> No właśnie o tę barierę na pamięci chodzi.
>> Tylko bariera jest wolna i nieoptymalna.
>
> Ta bariera nie jest wolniejsza niż używanie volatile. Wymusza tylko
> zrzut i pobranie zmiennych.
Wszystkich zmiennych. Używanie volatile jest wolne tylko w odniesieniu
do tego jednego obiektu.
Napisałem kiedyś makro, które robiło barierę na podanej zmiennej -
dziwię się, że nie ma czegoś takiego w bibliotece:
#define SYNC_VARIABLE(var) __asm__ __volatile__ ("" :"=m"(var):"m"(var))
>
>> cli();[operacje bez synchronizacji]sei();
>> - robi to co programista napisał a nie to co chciał, ale C jest znane z
>> tego że pozwala się postrzelić w stopę
>
> Tia, temat na kolejne bicie piany :-)
Po coś te grupy dyskusyjne powstały ;)
--
Pozdrawiam
Michoo
Następne wpisy z tego wątku
- 11.02.11 12:15 Zbych
- 11.02.11 12:22 Robbo
- 11.02.11 12:24 Zbych
- 11.02.11 12:33 Zbych
- 11.02.11 12:58 Robbo
- 11.02.11 13:09 Robbo
Najnowsze wątki z tej grupy
- ładowarka zmarła
- Podstawa bezpiecznikowa jako rozłącznik DC
- Napięcie akumulatora wyłączające UPS / jakie nowe akumulatory do UPS?
- nawigacja satelitarna
- SmartLife/Tuya i osuszanie -- mordowanie z zimną krwią...
- Głośnik piezoelektryczny
- Mala autonomiczna kamera monitoringu
- czas na emeryturę i EB
- Generowanie sumy kontrolnej z fragmentu pliku bin
- Re: Mala autonomiczna kamera monitoringu
- HDMI
- Re: Mala autonomiczna kamera monitoringu
- Kamera monitoringu z kartą SIM
- Re: Kamera monitoringu z kartą SIM
- Re: Kamera monitoringu z kartą SIM
Najnowsze wątki
- 2024-07-01 W-wa naklejki wjazd do centrum
- 2024-07-01 ładowarka zmarła
- 2024-07-01 Koder szuka pracy. Koduję w j.: Asembler, C, C++ (z Qt) i D.
- 2024-07-01 Kraków => Kierownik Działu Spedycji Międzynarodowej <=
- 2024-07-01 Białystok => Full Stack Web Developer (.Net Core, Angular6+) <=
- 2024-07-01 Berlin => Technical Rollouter (Radio Systems Software Installation and
- 2024-07-01 Warszawa => Key Account Manager <=
- 2024-07-01 Gdańsk => Programista Full Stack .Net <=
- 2024-07-01 Zabrze => Junior HelpDesk <=
- 2024-07-01 Warszawa => Key Account Manager <=
- 2024-07-01 Bielsko-Biała => Expert Migration Architect (Azure) <=
- 2024-07-01 Mini Netykieta polskich grup dyskusyjnych
- 2024-07-01 Re: Jak wypełnić polecenie francuskiego sądu blokowania niektórych zapytań DNS? Blokując Francję
- 2024-07-01 Re: Powtórne wezwanie na PO-komisję uzdrowi Ziobrę już w 10 dni
- 2024-07-01 CA -- problem z logowaniem