www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Rücksprungadressen bei ATMega16


Autor: Michael (Gast)
Datum:

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

Autor: spess53 (Gast)
Datum:

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

Autor: holger (Gast)
Datum:

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

Weniger RAM verschwenden? Welche Sprache? C oder ASM?

Autor: Ahem (Gast)
Datum:

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

Autor: Jadeclaw Dinosaur (jadeclaw)
Datum:

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

Autor: Ahem (Gast)
Datum:

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

Autor: Matthias Larisch (matze88)
Datum:

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

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.