www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Register werden langsam knapp...


Autor: AVRli (Gast)
Datum:

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

Autor: Martin Götzenberger (Gast)
Datum:

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

Autor: Peter Dannegger (peda)
Datum:

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

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.