AVR-GCC: Lokale Var. auf Stack erzwingen

OP #841829
Lesenswert?

Hallo,

ich habe eine Frage zu lokalen Variablen in Funktionen. Ich habe 
gesehen, dass der GCC sie in Register packt, wenn es paßt. Ist ja auch 
gut so. Nur wenn die Routine rekursiv aufgerufen wird, dann ist das 
schlecht. Ich habe schon versucht, die Info zu finden, es ist mir aber 
nicht gelungen.

Wie kann ich erzwingen, dass die lokalen Variablen auf den Stack gelegt 
werden für solch einen Fall?

Ist wahrscheinlich ganz einfach (wenn man es weiß :-)).

Danke für die Info.

900ss
#841832
Lesenswert?

900ss D. wrote:

> Nur wenn die Routine rekursiv aufgerufen wird, dann ist das
> schlecht.

Sicher? Meist ist es besser wenn keine Daten auf dem Stack landen, weil 
dann kein vollständiger Stackframe angelegt werden muss. Denn der dafür 
nötige Update vom Stackpointer ist bei AVRs etwas aufwendig.
#841847
Lesenswert?

900ss D. wrote:
> ich habe eine Frage zu lokalen Variablen in Funktionen. Ich habe
> gesehen, dass der GCC sie in Register packt, wenn es paßt. Ist ja auch
> gut so. Nur wenn die Routine rekursiv aufgerufen wird, dann ist das
> schlecht.

Warum soll das schlecht sein?

Laß das mal den Compiler machen, der weiß schon, was er tut.
C-Funktionen sind per default reentrant, wenn sie auf keine 
IO-Ressourcen zugreifen.
Es gibt Register, die muß der Aufrufer sichern und andere, die muß der 
Aufgerufene sichern.

Vielleicht kann der GCC sogar Rekursionen zu Schleifen optimieren.
Rekursionen sind ja nur kompliziert geschriebene Schleifen.


Peter

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