Forum: Mikrocontroller und Digitale Elektronik Lokale Variable in Watch Tracen


von next (Gast)


Lesenswert?

Hallo,
ich verwende uVision und will im Watch 1 fenster eine lokale Variable 
Tracen. Wenn ich den Debugger starte, steht da immer "<cannot 
evaluate>".
Definiere ich die Variable Global, zeigt er mir den wert an und der 
ändert sich auch entsprechend dem programm....
Hat jemand ne idee wie ich die Lokale Variable zum laufen bring??
mfg

von Karl H. (kbuchegg)


Lesenswert?

next schrieb:
> Hallo,
> ich verwende uVision und will im Watch 1 fenster eine lokale Variable
> Tracen. Wenn ich den Debugger starte, steht da immer "<cannot
> evaluate>".


lokale Variablen werden 'geboren' sobald eine Funktion betreten wird. 
Startest du einen Debugger, dann beginnt die Ausführung am Anfang und 
erst dann, wenn die Programmausführung IN die Funktion hineinläuft, erst 
dann existiert diese Variable. Es gibt sie weder vor dem 
Funktionsaufruf, noch nachdem die Funktion beendet wurde.

von next (Gast)


Lesenswert?

demnach geht es nur wenn ich sie global laufen lass....
danke :-)

von Karl H. (kbuchegg)


Lesenswert?

next schrieb:
> demnach geht es nur wenn ich sie global laufen lass...

Das hab ich nicht gesagt.
Aber die Frage erhebt sich: Wozu brauchst du ausserhalb einer Funktion 
einen Watch auf eine funktionslokale Variable? Die Variable ist doch 
sowieso nur innerhalb der Funktion interessant. Deswegen ist sie ja 
funktionslokal. Einen Breakpoint auf den Anfang deiner FUnktion und wenn 
der anspringt, wird dein Debugger die Fehlermeldung mit dem aktuellen 
Wert der Variablen ersetzen.

von next (Gast)


Lesenswert?

ich verwende im moment ein Demoboard zum Debuggen und habe keine weitere 
Perepherie ausen dran. Die variable enthält die Temperatur des µC Core´s 
im rohen ADC Wert. Ich würde eben im laufenden betrieb gerne die Werte 
sehen um zu sehen wie sehr er z.b. schwankt.
wenn ich den breakpoint kurz hinter das befüllen der Variable setzte 
sehe ich den Wert ja nur wenn ich im Debug ohne Breakpoint laufen lasse 
zeigt er garnix an.

von amateur (Gast)


Lesenswert?

Lokal definierte Variablen werden oft vom Compiler, in anderen 
Funktionen wiederverwendet. Dies bedeutet: Es gibt sie tatsächlich nicht 
mehr, bzw. ihr Speicherplatz wird anderweitig verwendet. Nur wenn Du die 
Speicherstelle explizit außerhalb definierst kannst du auch von dort aus 
darauf zugreifen.

von Ralf G. (ralg)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Einen Breakpoint auf den Anfang deiner FUnktion und wenn
> der anspringt, wird dein Debugger die Fehlermeldung mit dem aktuellen
> Wert der Variablen ersetzen.

... aber nur, wenn die Variable von Anfang bis Ende in der Funktion auch 
benötigt wird. Nach meinen Beobachtungen werden lokale Variablen 
meistens (immer?) in Registern gehalten. Sobald die Variable im weiteren 
Verlauf in der Funktion nicht mehr verwendet wird, wird aber 
möglicherweise das Register weiterbenutzt. Das bringt den Debugger aus 
dem Konzept ;-)

Gehört dort nicht hin, aber: Wenn man die Variable mal ausnahmsweise zu 
Testzwecken als 'volatile' deklariert, wird auch eine Speicherstelle 
dafür angelegt.

von Herold (Gast)


Lesenswert?

Oder ein static

von Ralf G. (ralg)


Lesenswert?

Herold schrieb:
> Oder ein static

Hmm. Muss man bei der Initialisierung evtl. aufpassen.

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.