Motorvärmartimer

Berätta om dina pågående projekt.
JJ
Inlägg: 366
Blev medlem: 16 maj 2005, 21:33:02

Inlägg av JJ »

PaNiC skrev: Varför ska globala variabler vara volatile och vad betydet det?
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.)

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.
Skriv svar