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

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