MEGA 32 Stack-Crash?

OP #235242
Lesenswert?
• ▲
▼
Hallo Leute,

bin gerade dabei ein relativ grosses Programm für nen mega 32 zu
schreiben (bislang ca 10k flash voll).
Neuerdings gibt es neuerdings Probleme wenn ich zusätslichen code
einfügen will.
U.U. hängt sich der controller auf weil offensichtlich der stackpointer
zerschossen wird.
Ich programmiere mit pn und winavr in C und lasse das ganze auf studio4
mit jtag laufen.
Hat jemand ne Ahnung? Vielleicht ne Einstellung am compiler falsch?
Gast #235243
Lesenswert?
• ▲
▼
Wirf einfach mal nen Blick ins *.map File.
In der Sektion .data stehen dann alle Variablen bis zur Sektion
.eeprom. Dann weißt Du wieviel noch für den Stack übrig ist bzw.
welches die größten Speicherfresser sind.


Peter
Gast #235244
Lesenswert?
• ▲
▼
da wird dir wohl kaum jemand helfen können, bei den Angaben...
Prinzipiell hat die Codegrösse erstmal nichts mit benötigter
RAM/Stackgrösse zu tun.
Rekursion eingebaut?
Assemblerteile eingefügt mit u.U. unterschiedlicher push/pop-Anzahl?
Kenne den WINAVR nicht, evtl. kannst du memory modell einstellen?? tiny
oder small?
OP #235245
Lesenswert?
• ▲
▼
Hallo Peter,

danke erstmal für den Tipp. Ich arbeite noch nicht so lange mit dieser
Entwicklungsumgebung, von daher hab ich da so meine Probleme bei der
Interpretation des .map-files. Ich schicke es einfach mal mit in der
Hoffnung du kannst mir da behilflich sein.

danke
marco
Angehängte Dateien:
Gast #235248
Lesenswert?
• ▲
▼
Was bis zum Beweis des Gegenteils nicht so sehr auf einen defekten
Stackpointer als auf eine defekte Return-Adresse im Stack schliessen
lässt.

Kann es sein, dass in einer Funktion ein Puffer als lokale Variable
definiert wird? Im Mapfile tauchen die nicht auf. Möglicherweise wird
über das Ende des Puffers hinaus geschrieben, oder der Puffer ist
schweinemässig gross.
OP #235250
Lesenswert?
• ▲
▼
Da habt ihr den Finger wahrscheinlich genau drauf.

Ich habe mir jetzt mal alle Felder genau angesehen. Da gibt es ein
statisches Feld mit 8 Elementen das im SRAM auf dem Bereich liegt in
dem der Stack residiert (>0x840).
Das array wird völlig banal im main deklariert und initialisiert und
ist vom Typ long int --> long int u[8];.
Wie kann das passieren?

marco

Antwort schreiben

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.

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.