Forum: Mikrocontroller und Digitale Elektronik in welchem Register wird Variable abgelegt


von Anfaenger (Gast)


Lesenswert?

In Assembler kann ich dierekt auf Register zugreifen. Wenn ich in C eine 
Variable erstelle, zb. int i, kann man feststellen, welchem Register 
diese Variable dann entspricht?

von Oliver J. (skriptkiddy)


Lesenswert?

Anfaenger schrieb:
> kann man feststellen, welchem Register
> diese Variable dann entspricht?
Schau ins Assembler-Listing.

Gruß Oliver

von Klaus (Gast)


Lesenswert?

Anfaenger schrieb:
> Wenn ich in C eine Variable erstelle, zb. int i, ..

will ich nicht wissen wo sie der Compiler hinlegt, deswegen verwende ich 
ja C und nicht Assembler. Wenn ich in Excel eine Variable verwende wo 
ist die dann?

MfG Klaus

von Anfaenger (Gast)


Lesenswert?

Klaus schrieb:
> will ich nicht wissen wo sie der Compiler hinlegt, deswegen verwende ich
> ja C und nicht Assembler. Wenn ich in Excel eine Variable verwende wo
> ist die dann?

und wenn ich gerne im Debug-Modus den Variableninhalt verfolgen möchte 
und mir die Registerwerte in dem Registerfenster anzeigen lasse dazu, 
woher soll ich es dann wissen?

von Klaus (Gast)


Lesenswert?

Anfaenger schrieb:
> Klaus schrieb:
>> will ich nicht wissen wo sie der Compiler hinlegt, deswegen verwende ich
>> ja C und nicht Assembler. Wenn ich in Excel eine Variable verwende wo
>> ist die dann?
>
> und wenn ich gerne im Debug-Modus den Variableninhalt verfolgen möchte
> und mir die Registerwerte in dem Registerfenster anzeigen lasse dazu,
> woher soll ich es dann wissen?

Dann fragst du den Debugger, welchen Wert i hat, dafür ist er ja da. 
Möglicherweise ist i ja garnicht in einem Register sondern irgendwo im 
Speicher.

MfG Klaus

von variable (Gast)


Lesenswert?

Wo steht denn, daß Variablen in Registern abgelegt werden?
Diese werden typischerweise im RAM oder EEPROM evtl. Flash abgelegt.
Wenn sie dann benutzt werden, kann es durchaus vorkommen, das sie in ein 
Register kopiert werden. Das hängt zuletzt vom uC und vom Compiler ab.

Beim debuggen sollte es reichen, den Variableninhalt beobachten zu 
können.

Gruß

von Anfaenger (Gast)


Lesenswert?

variable schrieb:
> RAM oder EEPROM evtl. Flash abgelegt.

aha, und wenn ich ne Zählvariable hab, die oft ihren Wert verändert und 
dann im EEPROM abgelegt wird, der nur ne begrenzte Beschreibkarkeit hat 
..., ist ja echt unpraktisch, dass ich nicht selber bestimmen kann, in 
welchem Speicherbereich der die Variable hinlegt.

von Marius W. (mw1987)


Lesenswert?

Nein, Zählvariablen liegen in der Regel im RAM oder einem Register. Ist 
aber egal, wenn du die "Watch"-Funktion deines Debuggers nutzt.

Gruß
Marius

von variable (Gast)


Lesenswert?

Du musst den Speicherort der Variablen sogar definieren.
Standardmäßig werden Variablen im RAM abgelegt. Das kannst Du natürlich 
änden.
Ein Zähler im EEPROM macht nur dann Sinn, wen  die Intervalle lange 
genug sind wo Du speicherst, oder Du willst den EEPROM killen.

Wo liegt eigentlich Dein Problem?

Gruß

von Klaus (Gast)


Lesenswert?

Anfaenger schrieb:
> ist ja echt unpraktisch, dass ich nicht selber bestimmen kann, in
> welchem Speicherbereich der die Variable hinlegt.

Entweder du programmierst in einer höheren Sprache und kümmerst dich 
nicht darum, ob dein Prozessor überhaut Register hat und wenn, 
wieviele es sind. Oder du machst alles in Assembler.

MfG Klaus

von Anfaenger (Gast)


Lesenswert?

variable schrieb:
> Wo liegt eigentlich Dein Problem?

Dass ich nicht bedacht hab, dass man mit einem C-Programm nicht die 
Werte der Register so beobachten kann wie in einem Assebler-Programm. 
Zwar verändern sich die Register auch von Schritt zu Schritt, aber die 
Zordnung kenne ich nicht.

Marius Wensing schrieb:
> wenn du die "Watch"-Funktion

Jetzt muss ich nur noch rauskriegen, wo ich die Watchfunktion finde.

von Klaus W. (mfgkw)


Lesenswert?

Im gdb tippen:
help watch

Aber evtl. willst du nicht watch, sondern display:
help display

von Oliver S. (oliverso)


Lesenswert?

Anfaenger schrieb:
> und wenn ich gerne im Debug-Modus den Variableninhalt verfolgen möchte

Klaus schrieb:
> Dann fragst du den Debugger, welchen Wert i hat, dafür ist er ja da.

So ist es. Der Debugger wird dir schon den richtigen Wert zeigen, egal, 
ob die Variable aktuell (oder überhaupt nur) in einem Register lebt, 
oder im Ram.

Oliver

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.