www.mikrocontroller.net

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


Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Markus (Gast)
Datum:

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

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.