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!
Hi >Frage: Gibt es eine gute Lösung für dieses Problem mit den >Rücksprungadressen? Wie rufst du deine Unterprogramme auf? MfG Spess
>Frage: Gibt es eine gute Lösung für dieses Problem mit den >Rücksprungadressen? Weniger RAM verschwenden? Welche Sprache? C oder ASM?
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.
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.
>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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.