Register werden langsam knapp...

Gast #113207
Lesenswert?
• ▲
▼
Hi,

wer meine Fragen hier verfolgt hat wirds gemerkt haben. ;-)

So langsam wächst mein Projekt und das Resultat ist das nun die
Register nicht mehr ausreichen. ;-(

Wie organisiert man denn größere Programm "richtig" oder besser
gefragt wie macht das einer der sich damit auskennt.

Ich lege alles in Register ab.
Nur wenn ich nun daran denke das man ja mit, Subroutinen Daten
austauschen will und sich auch ein paar Zustände merken will
(Hauptprogramm, Interrupt, Statusregister), wird es eng und es
überlappen sich doch dann Register.

Ok SRAM da kann man was ablegen das habe ich auch schon gemacht.
Es ist bestimmt ein Teil der Lösung.

Nur wie teilt man sich die Register richtig auf/ein?

Was würdet ihr empfehlen wie man vorgehen sollte?
Da ich noch nicht lange in Assembler schreibe
möchte ich mir keinen "falsche style" angewöhnen.

Alles wieder in Assembler... und ATMEGA8.

Gruß AVRli
Gast #113208
Lesenswert?
• ▲
▼
Hallo!

ich mach's mir da einfach:

Ein paar Daten brauche ich immer in schnellen Interruptroutinen. Die
bleiben im Register. Alles was im Hauptprogramm läuft wird ins SRAM
ausgelagert. Bei langsameren Interruptroutinen entscheidet dann der
Restbestand an Registern, ob die Daten ausgelagert werden.

(alles in Assembler... und Haupsache AVR)

servus,
Martin
#113209
Lesenswert?
• ▲
▼
- Register nur für lokale Variablen und Parameterübergabe verwenden.

- Extra Register für Interrupts reservieren, damit man sich unnötiges
PUSH/POP spart.

- Globale Variablen grundsätzlich im SRAM anlegen.

- Sind zum Schluß noch Register übrig, können besonders häufig benutzte
globale Variablen doch in Register gelegt werden.
Ist aber nur Codeoptimierung, d.h. wenn der Flash knapp wird.


Schau Dir mal meine Beispiele in der Codesammlung an.
Da werden zwar keine Variablen im SRAM abgelegt (da Tiny12), aber viele
Register werden local, d.h. mehrfach verwendet.


Peter

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.