Witam .
Mam takie małe pytanko odnośnie 'volatile' . Po przeczytaniu wyjaśnienia w niebieskiej książce Mirka i uzupełnieniu ewentualnych braków
tutaj byłem przekonany , że wiem wszystko o tym specyfikatorze .
Przeglądając jednak sieć parę dni temu natknąłem się na prezentowany poniżej fragment
dokumentuCytuj:
Obsługa przerwań (3)
Nieco wydumana procedura obsługi przerwania INT0 zmienia
stan wyjścia co drugi raz:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Aktywne czekanie w procedurze obsługi przerwania jest
wyjątkowo złym rozwiązaniem!
Zostało użyte, aby uniknąć problemu drgania styków klawisza
i zademonstrować użycie słowa kluczowego volatile.
Zdecydowanie demonstruje użycie 'volatile' lecz nie wyjaśnia jego zastosowania .
O ile definiowanie wewnątrz przerwania zmiennej ze specyfikatorem 'static' jest dla mnie oczywiste ,nie bardzo jakoś jest dla mnie zrozumiałe , dlaczego zmienna definiowana wewnątrz przerwania opatrzona jest specyfikatorem 'volatile' ? Jaki ma to wpływ na zachowanie się programu po kompilacji ?
Szukałem odpowiedzi w sieci ale nie udało mi się znaleźć nic konkretnego co by mogło wyjaśnić powyższe zastosowanie 'volatile' , poza umieszczoną na wielu stronach regułą , że :
Cytuj:
ZAWSZE ale to ZAWSZE - jeśli korzystamy ze zmiennej zarówno w przerwaniu jaki i w dowolnej funkcji programu - TRZEBA użyć specyfikatora volatile.
Wydaje mi się jednak , że to bardziej odnosi się do zmiennej definiowanej w funkcji ,w czasie działania której przerwanie może być wywołane i dokonywać zmian na tej zmiennej a nie do zmiennej definiowanej w przerwaniu , która poza nim nie jest widoczna dla innych funkcji .
Tak więc nie wiem czy autorzy tego
opracowania wzięli sobie tę regułę zbyt mocno do serca i wszędzie definiują zmienne 'volatile' czy jednak jak zwykle czegoś nie wiem i patrzę na to w zły sposób.
Dziękuję za jakiekolwiek wyjaśnienie i pozdrawiam .