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?
- posted
16 years ago
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?
jakby ktoś znał inne haczyki w temacie winavr to też proszę o informacje - do pdfa z avrlibc na szczęście dotarłem ;o)
Zapewne do tego samego co w standardzie C, poszukaj w góglach...
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.
Bogdan G napisał(a):
...tudzież też wszystkie rejestry zmieniane z "zewnątrz" których kompilator nie może "przewidzieć" np. porty itd.
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?
i jeszcze jedno (wiem, że laickie) jak się symuluje w AVR studio?
identyfikator: 20040501 napisał(a):
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.
czy możecie mi jeszcze powiedzieć jak wygenerować plik lst z kodem assemblerowym programu? w AVR Studio zintegrowanym z WinAVR oczywiście.
ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.