Forum: Mikrocontroller und Digitale Elektronik Variablen und Registerverwendung für C Funktion ansehen


von Luke (Gast)


Lesenswert?

Hallo,

ich habe eine Funktion, die - natürlich - Variablen anlegt und 
verwendet. Nun möchte ich herausfinden, ob dafür die Register des AVR 
verwendet werden oder diese im SRAM abgelegt werden (oder beides).

Gibt es eine Möglichkeit zu sehen, wo der Compiler die Variablen 
"hinlegt"? Weil so in den Assemblercode zu schauen scheint mir etwas 
unübersichtlich ...

Viele Grüße,
Luke

von Klaus W. (mfgkw)


Lesenswert?

Luke schrieb:
> Gibt es eine Möglichkeit zu sehen, wo der Compiler die Variablen
> "hinlegt"?

In den Assemblercode schauen.

> Weil so in den Assemblercode zu schauen scheint mir etwas
> unübersichtlich ...

Man kann nicht alles haben :-)

von (prx) A. K. (prx)


Lesenswert?

Du kannst natürlich auch mit Debugging übersetzen und dir die 
entsprechende Info im Ergebnis anschauen (readelf -w).

von Amateur (Gast)


Lesenswert?

Falls es sich um das GNU handelt:
Dazu gibt es, ich glaube im How-To oder in den FAQ, eine Beschreibung 
über die verwendeten Register im Zusammenhang mit "C". Darüber hinaus 
verhält sich das Teil wie jeder andere Compiler: Sind keine, dafür 
freigegebenen Register mehr verfügbar, so muss das RAM herhalten.

von Yalu X. (yalu) (Moderator)


Lesenswert?

Luke schrieb:
> Nun möchte ich herausfinden, ob dafür die Register des AVR
> verwendet werden oder diese im SRAM abgelegt werden (oder beides).

Außer der Ablage der Variable in einem Register oder im SRAM (statisch
oder Stack), gibt es noch weitere Möglichkeiten, was damit passieren
kann:

- Die Variable wird komplett eliminiert, weil ihr Inhalt nirgends
  benötigt wird.

- Eine oder mehrere Variablen werden durch eine oder mehrere neue
  Variablen mit anderem Inhalt, aber gleichem Informationsgehalt
  ersetzt.

Um all diese Fälle und die logischen Zusammenhäbge zu Gesicht zu
bekommen, führt praktisch nichts am Assemblercode vorbei.

Bei den GNU-Tools kann bekommt man mit den folgenden Compiler-Optionen
man ein Assemblerlisting mit wertvollen zusätzlichen Informationen
geliefert:
1
avr-gcc -mmcu=atmega8 -Os -c -fverbose-asm -Wa,-adhln -g avrtest.c >avrtest.lst

Es enthält:

- natürlich den Assemblercode selbst

- die C-Quellcodezeilen, aus denen der Assemblercode entstanden ist

- hinter den einzelnen Assemblerbefehlen als Kommentar die lokalen oder
  globalen Variablennamen, auf die sich die Befehlsargumente beziehen

Oftmals haben diese Variablen komische Namen, die im C-Programm gar
nicht auftauchen. Das sind dann entweder temporäre Variablen oder die
oben erwähnten Ersatzvariablen.

Alternativ dazu könntest du dir auch die RTL-Dumps anschauen, aber ohne
die genaue Kenntnis der Syntax sind diese noch viel schwerer als der
Assemblercode zu lesen.

von Stefan F. (Gast)


Lesenswert?

Im AVR Studio dürfte es am einfachsten sein, das Programm im Debugger zu 
starten und einen Unterbrechungspunkt dort setzen, wo die Variable 
benutzt wird. Dann einfach drauf zeigen.

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.