identyfikator: 20040501
Guest
Sun Aug 12, 2007 11:12 am
szukam informacji których nie znalazłem w dokumentacji do
win-avr, czy ktoś może mi wyjaśnić do czego używa się
volatile?
identyfikator: 20040501
Guest
Sun Aug 12, 2007 11:13 am
jakby ktoś znał inne haczyki w temacie winavr to też proszę
o informacje - do pdfa z avrlibc na szczęście dotarłem ;o)
Wiktor S.
Guest
Sun Aug 12, 2007 12:39 pm
Quote:
szukam informacji których nie znalazłem w dokumentacji do
win-avr, czy ktoś może mi wyjaśnić do czego używa się
volatile?
Zapewne do tego samego co w standardzie C, poszukaj w góglach...
--
Azarien
Bogdan G
Guest
Sun Aug 12, 2007 12:46 pm
Quote:
szukam informacji których nie znalazłem w dokumentacji do win-avr, czy
ktoś może mi wyjaśnić do czego używa się volatile?
Bo to jest nie win-avr ale ANSI C. Zmienna ulotna, czyli taka, która może
zmienić w każdej chwili swoją wartość.
Wyobraź sobie fragment:
w=1;
while (w) do {};
Jeśli zmienna w nie będzie volatile wówczas kompilator najprawdopodobniej
zoptymalizuje kod do bezwarunkowej pętli nieskończonej.
Jeśli jest volatile wówczas nie może tego zrobić, i będzie sprawdzał warunek
w każdym przejściu pętli.
Ot i cała różnica.
Żebyś nie musiał zadawać drugiego pytania to odpowiadam: zmienna w może
zmienić się w przerwaniu.
klosso
Guest
Sun Aug 12, 2007 1:40 pm
Bogdan G napisał(a):
Quote:
szukam informacji których nie znalazłem w dokumentacji do win-avr, czy
ktoś może mi wyjaśnić do czego używa się volatile?
Bo to jest nie win-avr ale ANSI C. Zmienna ulotna, czyli taka, która może
zmienić w każdej chwili swoją wartość.
Wyobraź sobie fragment:
w=1;
while (w) do {};
Jeśli zmienna w nie będzie volatile wówczas kompilator najprawdopodobniej
zoptymalizuje kod do bezwarunkowej pętli nieskończonej.
Jeśli jest volatile wówczas nie może tego zrobić, i będzie sprawdzał warunek
w każdym przejściu pętli.
Ot i cała różnica.
Żebyś nie musiał zadawać drugiego pytania to odpowiadam: zmienna w może
zmienić się w przerwaniu.
....tudzież też wszystkie rejestry zmieniane z "zewnątrz" których
kompilator nie może "przewidzieć" np. porty itd.
identyfikator: 20040501
Guest
Sun Aug 12, 2007 5:14 pm
mam jeszcze pytanie, zainstalowałem sobie WinAVR, później
AVR Studio 4.13, napisałem hello world! w AVR studio, dałem
build i się skompilowało - czego nie rozumiem, czy coś
trzeba konfigurować, żeby można było kompilować i symulować
programy w C w AVR Studio?
identyfikator: 20040501
Guest
Sun Aug 12, 2007 5:17 pm
i jeszcze jedno (wiem, że laickie) jak się symuluje w AVR
studio?
Tomasz Pyra
Guest
Sun Aug 12, 2007 9:53 pm
identyfikator: 20040501 napisał(a):
Quote:
szukam informacji których nie znalazłem w dokumentacji do win-avr, czy
ktoś może mi wyjaśnić do czego używa się volatile?
Wyłącza mechanizmy optymalizacji ilości dostępów do pamięci w stosunku
do tej zmiennej.
Jeżeli przy deklaracji użyjesz 'volatile', za każdym użyciem zmiennej,
jej wartość będzie pobierana z pamięci i po każdym użyciu wartość będzie
do pamięci zapisywana.
Gdybyś nie użył volatile, kompilator mógłby zoptymalizować ilość
dostępów do pamięci i przez jakiś czas przechować wartość zmiennej w
rejestrze.
Często kompilator wykonuje taką optymalizację w stosunku do liczników
pętli, lub w innych przypadkach gdy wykonujesz wiele działań na jednej
zmiennej.
Volatile używa się tam, gdzie istnieje możliwość że "nagle" wartość
zmiennej będzie pobierał (lub zapisywał) inny wątek lub procedura
obsługi przerwania, a ważne jest żeby wartość była zawsze aktualna.
identyfikator: 20040501
Guest
Mon Aug 13, 2007 6:29 pm
czy możecie mi jeszcze powiedzieć jak wygenerować plik lst z
kodem assemblerowym programu? w AVR Studio zintegrowanym z
WinAVR oczywiście.