[avrgcc] do czego służy volatile?

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?

Reply to
identyfikator: 20040501
Loading thread data ...

jakby ktoś znał inne haczyki w temacie winavr to też proszę o informacje - do pdfa z avrlibc na szczęście dotarłem ;o)

Reply to
identyfikator: 20040501

Zapewne do tego samego co w standardzie C, poszukaj w góglach...

Reply to
Wiktor S.

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.

Reply to
Bogdan G

Bogdan G napisał(a):

...tudzież też wszystkie rejestry zmieniane z "zewnątrz" których kompilator nie może "przewidzieć" np. porty itd.

Reply to
klosso

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?

Reply to
identyfikator: 20040501

i jeszcze jedno (wiem, że laickie) jak się symuluje w AVR studio?

Reply to
identyfikator: 20040501

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.

Reply to
Tomasz Pyra

czy możecie mi jeszcze powiedzieć jak wygenerować plik lst z kodem assemblerowym programu? w AVR Studio zintegrowanym z WinAVR oczywiście.

Reply to
identyfikator: 20040501

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.