volatile betyder att variabelvärdet måste läsas från minnet varje gång det används. Utan volatile så kan kompilatorn välja att ha variabelvärdet liggande i ett register men då blir det fel om ett interrupt ändrar i variabeln. (Interruptet kan ändra i variabelns värde i minnet men huvudprogrammet fortsätter att använda sin egen kopia i registret.)PaNiC skrev: Varför ska globala variabler vara volatile och vad betydet det?
volatile behöver användas på global data som används från olika interrupt eller interrupt och huvudprogram. (Eller olika trådar i realtids-OS.) Man skall också använda det på i/o-portar och hårdvaruregister som kan ändras från hårdvara.
Program kan mycket väl fungera även om man glömt volatile. Om kompilatorn inte optimerar så spelar det ingen roll för den genererade koden.