-
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
- "ogrodowa linia napowietrzna"
- jaki zasilacz laboratoryjny
- jaki zasilacz laboratoryjny
- Puszka w ziemię
- T-1000 was here
- Ściąganie hasła frezem
- Koszyk okrągły, walec 3x AA, na duże paluszki R6
- Brak bolca ochronnego ładowarki oznacza pożar
- AMS spalony szybkim zasilaczem USB
- stalowe bezpieczniki
- Wyświtlacz ramki cyfrowej
- bateria na żądanie
- pradnica krokowa
- Nieustający podziw...
- Coś dusi.
Najnowsze wątki
- 2025-02-04 ranking wyciszenia, głośność, hałas przy 130 km/h, na postoju, przy przyspieszaniu
- 2025-02-05 Warszawa => IT Recruiter <=
- 2025-02-05 Ostrów Wielkopolski => Area Sales Manager OZE <=
- 2025-02-05 Rzeszów => Spedytor Międzynarodowy <=
- 2025-02-05 Warszawa => IT Business Analyst <=
- 2025-02-05 Warszawa => Specjalista DevOps <=
- 2025-02-05 Łódź => NodeJS Developer <=
- 2025-02-05 Warszawa => QA Engineer (Quality Assurance) <=
- 2025-02-05 Gdańsk => Specjalista ds. Sprzedaży <=
- 2025-02-05 Warszawa => QA Engineer <=
- 2025-02-05 Warszawa => Programista Full Stack .Net <=
- 2025-02-05 Re: UK: Michał K. dalej czeka na rozprawę ekstradycyjną w areszcie [bo nie (jeszcze?) zebrał kaucji]
- 2025-02-04 podpisywanie umów z datą wsteczną
- 2025-02-04 Radio internetowe do starego Androida
- 2025-02-04 "ogrodowa linia napowietrzna"