Forum: Mikrocontroller und Digitale Elektronik Rücksprungadressen bei ATMega16


von Michael (Gast)


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!

von spess53 (Gast)


Lesenswert?

Hi

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

Wie rufst du deine Unterprogramme auf?

MfG Spess

von holger (Gast)


Lesenswert?

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

Weniger RAM verschwenden? Welche Sprache? C oder ASM?

von Ahem (Gast)


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.

von Jadeclaw D. (jadeclaw)


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.

von Ahem (Gast)


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.

von Matthias L. (matze88)


Lesenswert?

Ich tippe total blind darauf, dass du meinst, dass dein Stack überläuft? 
Schau mal, wieviele Strings du im Ram ablegst... Dafür immer das Flash 
benutzen! (PROGMEM Attribut).

Ansonsten siehe vorherige Antworten...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.