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

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