volatile notwendig bei einer globalen var?

Gast #2012509
Lesenswert?

hi,

ich verwende den xc164! muss man eine globale variable die man im 
interrupt und in der main loop verwendet oder über mehrere interrupts 
verwendet mit volatile deklarieren?

also.:
unsigned char volatile g_test=0;

void ASC0_viRx(void) interrupt 0x2B
{
    g_test = 1;
}

void main
{
   while(test == 0);
   ...
}

lg
Gast #2012532
Lesenswert?

ja ich ändere die globale var im interrupt! ohne volatile speichert er 
mir die variable in einem register zwischen...kommt halt auf die 
compiler optimierung an...

verwende den Keil C166 compiler!

reicht das volatile für die synchronisierung? ich muss ja nur dafür 
sorgen, dass er die variable in einem asm befehl gelesen oder 
geschreiben wird?!

nimmt man hier variante a oder b?
a.) unsigned char volatile g_test=0;
    anderes modul:
    extern unsigned char volatile g_test;

b.) volatile unsigned char g_test=0;
    anderes modul:
    extern volatile unsigned char g_test;


lg
Gast #2013951
Lesenswert?

Gerald schrieb:
> reicht das volatile für die synchronisierung? ich muss ja nur dafür
> sorgen, dass er die variable in einem asm befehl gelesen oder
> geschreiben wird?!

volatile synchronisiert nicht. Und es sorgt auch nicht für atomare 
Zugriffe.

volatile macht überhaupt viel weniger, als die Leute gemeinhin so 
annehmen.
Gast #2013957
Lesenswert?

Gerald schrieb:
> reicht das volatile für die synchronisierung?

Dafür reicht volatile nie, und dafür ist es auch nicht da.
Synchronisierung, Thread/Interrupt-Sicherheit, Atomare Zugriffe usw. 
kannst du mit volatile nicht erzwingen.
=> Selber machen (cli/sei) oder wissen, das ein 8-Bit-µC eine 
8-Bit-Variable sowieso in einem Befehl lesen wird.

Und auch für deinen eigentlichen Anwendungszweck ist volatile nicht 
wirklich richtig, funktioniert aber und ist halt C-Anfängern leichter 
beizubringen als die Alternativen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren