Forum: Compiler & IDEs AVR: Variablen explizit in Register legen


von Markus (Gast)


Lesenswert?

Hi, ich habe gleich noch eine Frage. Ist es möglich den Compiler 
anzuweisen das er bestimmte Variablen nicht in's Ram legt sondern 
permanent in den Registern hält?
Wieviele Register werden vom avrgcc überhaupt verwendet?

von gast (Gast)


Lesenswert?


von Markus (Gast)


Lesenswert?

Ah, danke. Aber irgendwie wirkt sich das eher negativ auf die Laufzeit 
aus. Seltsam

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Man kann jedes Feature ad absurdum treiben, es hängt immer davon
ab, wofür du es benutzen willst.  Programme für sehr kleine
Controller können davon profitieren, zum Beispiel wenn mal alle
in ISRs benutzten Variablen in Register auslagert.  Dann müssen
sie nicht mehr so viel auf den Stack retten.

von Karl H. (kbuchegg)


Lesenswert?

Markus wrote:
> Ah, danke. Aber irgendwie wirkt sich das eher negativ auf die Laufzeit
> aus. Seltsam

Nicht wirklich.
Es ist eher selten (Jörg hat einen Fall aufgezeigt), in dem
du mit einer Register Zuweisung dein Programm besser optimieren
kannst als der Compiler. Auf PCs wird zb. gerne die Regel
ausgegeben: Im besten Fall ignoriert der Compiler deinen register-
Wunsch. Also lass es lieber bleiben.
Compiler haben ausgeklügelte Algorithmen die auf Datenfluss Analyse
basieren um die Register Belegung zu optimieren.

Lediglich in Ausnahmefällen, wie zb. Interrupt Routinen kann eine
explizite register Vereinbarung etwas bewirken. Aber immer daran
denken: Wenn du ein Register für eine bestimmte Variable reservierst,
dann steht dieses Register an anderer Stelle für den Compiler nicht
mehr zur Verfügung. D.h. an einer Stelle wird dadurch der Zugriff
auf eine Variable zwar schneller, aber dafür kann es passieren,
dass an 50 anderen Stellen extra Klimmzüge gemacht werden müssen
um den Ausfall dieses Registers zu kompensieren.

von Markus (Gast)


Lesenswert?

>D.h. an einer Stelle wird dadurch der Zugriff
>auf eine Variable zwar schneller, aber dafür kann es passieren,
>dass an 50 anderen Stellen extra Klimmzüge gemacht werden müssen
>um den Ausfall dieses Registers zu kompensieren.

Möglich. naja, Pech gehabt

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.