Użytkownik T.M.F. napisał:
Niestety oryginalne z interrupt.h i są one tam zdefiniowane dokładnie tak jak Kolega napisał.
W dużym uproszczeniu ogranicza kompilatorowi możliwości optymalizacji. W stosunku do zmiennej wymusza bezwarunkowe każdorazowe czytanie aktualnej wartości zmiennej z pamięci przed wykonaniem jakichkolwiek operacji na zmiennej. Czyli kompilatorowi nie wolno dla uproszczenia/przyśpieszenia kodu banglać przez cała procedurę na wartości skopiowanej do rejestrów. Inaczej mówiąc zmienna ma być tak traktowana jakby jej zawartość mogła się w każdej chwili zmienić (np. przez inny wątek programu). W kontekście powyższego (chyba, że jest jednak inna definicja volatile) nadal nie mogę zrozumieć z jakiej paki rozkaz sei() umieszczony na końcu funkcji znalazł się nagle na jej początku.
Pozdrawiam Grzegorz