Forum: PC-Programmierung static Variable wirklich nötig?


von GameBoy (Gast)


Lesenswert?

Hallo

ich hab ein code fragment im netz gefunden und frage mich warum die 
variable
var mit static deklariert wird?

In diesem fall kann man doch auch das static weglassen oder? denn ist 
doch nicht schlimm wenn die variavle bei jedem Interrupt Aufruf neu 
initialisiert wird oder?
1
ISR(USART_RXC_vect)
2
{
3
  static unsigned char var=0;
4
5
  var=UDR;
6
  buff[k]=var;
7
  
8
}

grusse

von (prx) A. K. (prx)


Lesenswert?

In diesem Fragment ergibt das keinen Sinn. Nur ergibt das Fragment 
selbst auch keinen Sinn, also lässt sich das nicht abschliessend 
beuteilen.

von volltroll.de (Gast)


Lesenswert?

In diesem fall kannste auch schreiben :
1
ISR(USART_RXC_vect)
2
{
3
  buff[k]=UDR;
4
}

Kanns sein, daß du es mit Volatile verwechselst? (passt aber auch nicht 
in diesen Code)

von volltroll.de (Gast)


Lesenswert?

PS. wenn k nicht volatile ist, ist dein Code eh mist ;)

von efrewr (Gast)


Lesenswert?

den code gibts hier:
http://www.htw-dresden.de/~beck/Atmel/V6.html


ISR(USART_RXC_vect)
{
  static unsigned char zeichen=0;

  zeichen=UDR;
  buffer[irw]=zeichen;
  irw+=1; if (irw==RING_SIZE) irw=0;
  count ++;
}


Also macht kein Sinn, da die variable eh im nächsten schritt mit UDR 
überschrieben wird?

von (prx) A. K. (prx)


Lesenswert?

Die Variable ist Unsinn.

von Karl H. (kbuchegg)


Lesenswert?

Vermutung:
Die Idee könnte gewesen sein, eine Variable zu haben, an die man mit dem 
Debugger einfach rankommt.
static deshalb, damit nicht wegen dieser einen Variablen ein Stackframe 
für die ISR aufgebaut werden muss.

von efrewr (Gast)


Lesenswert?

achso...ja das kann sein :=)

danke..

von zwieblum (Gast)


Lesenswert?

ausserdem hilft dir das static gegen einen stackoverflow zur laufzeit. 
wennst zu wenig ram hast, schreit spätestens avrdude beim flashen :-)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.