Rücksprungadressen bei ATMega16

Gast #1259158
Lesenswert?
• ▲
▼
Hallo,
Habe ein Problem beim Programmieren mit Atmel AVR Studio und ATMega16:
Das Programm ist mittlerweile so groß geworden, dass die 
Rücksprungadressen mit Stackpointer nicht mehr ausreichen. B.z.w. Weit 
unten stehende Unterprogramme können nicht mehr ausgeführt werden.

Frage: Gibt es eine gute Lösung für dieses Problem mit den 
Rücksprungadressen?

Vielen Dank im Voraus!
Gast #1259185
Lesenswert?
• ▲
▼
Versuche die Anzahl der verschachtelten Subroutinenaufrufe zu 
vermindern.
Wenn Du in C schreibst (sorry Glaskugel ist im Hungerstreik) dann simple 
Funktionen inline dekorieren.

Alternativ:
Schau mal nach, ob Du RAM sparen kannst, das dann für den Return-Stack 
verwendet werden kann.
#1259190
Lesenswert?
• ▲
▼
In C ist sowas kein Thema, da den richtigen Call zu verwenden, ist Sache 
des Compilers. Anders bei Assembler, wenn man es gewohnt ist, 
Unterprogramme mit RCALL aufzurufen. wird beim ATMega16 Probleme 
bekommen. Lösung: CALL statt RCALL verwenden und gut is'. Beim CALL wird 
eine Adresse mit 16 bis 22 Bit mit übergeben, das reicht immer für den 
gesamten Speicher. Übrigens, mit den Rücksprungadressen gibt es generell 
kein Problem, die sind immer so lang, wie es der CALL/RCALL vorgibt.

Achja, der Stack ist hoffentlich auch richtig initialisiert?

Gruß
Jadeclaw.
Gast #1259222
Lesenswert?
• ▲
▼
>Das Programm ist mittlerweile so groß geworden, dass die
>Rücksprungadressen mit Stackpointer nicht mehr ausreichen. B.z.w. Weit
>unten stehende Unterprogramme können nicht mehr ausgeführt werden.

Den Antworten wirst Du entnehmen können, das unklar ist, ob Du meinst, 
das Du keinen Speicherplatz mehr im Stack hast, um Rücksprungadressen 
abzulegen oder ob Deine aufzurufenden Subroutinen für einen RCALL zu 
weit weg sind.

Bezieht sich das "weit unten" auf die Adresse der Subroutine (das wäre 
dann eigentlich "weit oben") oder auf die Aufrufkette oder Hierarchie? 
Inwiefern "reichen die Rücksprungadresse nicht aus"?

Kläre das bitte auf.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.