Forum: Mikrocontroller und Digitale Elektronik AVR Studio 5.1 Initial Stack pointer verschoben - Verständnisfrage


von Nico B. (vegetico)


Lesenswert?

Moin.
Ich hatte vor kurzem daheim das neue AVR Studio 5.1 installiert und 
wollte am Wochenende ein eigentlich fertiges Projekt auf nen Kontroller 
spielen.
Kurz gefasst, es hat nix funktioniert...

Ich fang mal hinten an: Ursache war in den Linker Settings die Stack 
Speicher Initialisierung, die auf 0x80 gesetzt war (is wohl beim 
Konvertieren entstanden). Das Ganze nebenbei bei nem ATTiny 2313 (also 
eh wenig RAM).

Vom Verständnis her: der Stack wächst von oben nach unten im RAM. Eine 
Initialisierung auf 0x80 bewirkt im Endeffekt eine Verkleinerung meines 
RAMs, oder - das Ding halt schneller voll. Bzw. da der Tiny eigentlich 
nur 128 hat... Was passiert dann???
Weil - da ich am Anfang nicht wußte was das Problem ist hab ich halt 
erstmal Funktionen rausgenommen - und ab einer gewissen Größe lief dann 
wieder (zumindest n Teil). Es war aber egal was ich auskommentiert hab - 
irgendwann wurde es wieder 'dunkel'... Sprich bei wenig RAM Verbrauch 
hatte es eigentlich funktioniert.

Versteh ich das Verhalten oben richtig - bzw. ist das der Fall??? Kann 
man sowas irgendwie vorher (beim kompilieren) sehen??? Compiler Warning 
stehen eigentlich immer auf All (gestern sogar auf pedantic, weil ich 
den Fehler nicht gefunden hatte).
Wann macht eine Stack Uminitialisierung Sinn bzw. wann brauch ich das??? 
N kleines Beispiel wäre super - muß echt nicht viel sein...

Danke schonmal
Gruß
Nico

von Tom M. (Gast)


Lesenswert?

Dein MCU hat also 128d oder 80h Bytes RAM, der SP wird ans RAM Ende 
gelegt und der Stack wächst zu den niederen Adressen hin. Was willst du 
da "uminitialisieren"?

von Nico B. (vegetico)


Lesenswert?

Wenn ich nen Überlauf im RAM habe, was passiert dann... Ist das wien 
Ring - sprich er fängt wieder bei 0 an???
Oder schreib ich dann??? Wohin???

Was passiert mitm Stack, wenn ich im Prinzip keinen RAM habe???

Und wo brauch ich sowas???

von Oliver (Gast)


Lesenswert?

Nico B. schrieb:
> Wenn ich nen Überlauf im RAM habe, was passiert dann... Ist das wien
> Ring - sprich er fängt wieder bei 0 an???

Jein. Offiziell nicht, tatsächlich aber wohl irgendwann schon. Offiziell 
ist das aber alles undefiniert und nicht zulässig, also solltest du das 
vermeiden.

Nico B. schrieb:
> Oder schreib ich dann??? Wohin???

Irgendwohin - ins leere oder auch irgendwo ins RAM. Undefiniert halt.

Nico B. schrieb:
> Was passiert mitm Stack, wenn ich im Prinzip keinen RAM habe???

Kommt drauf an, was due mit "im Prinzip" meinst. Gibt es gar kein Ram, 
gibt es auch gar keinen Stack, und damit auch gar keine Programme, die 
einen solchen brauchen.

Nico B. schrieb:
> Und wo brauch ich sowas???

Keine Ahnung, was du mit "sowas" meinst, aber wenn du schon so fragst, 
brauchst du es nicht.

Oliver

von Nico B. (vegetico)


Lesenswert?

Danke für die Antworten...
Ich vergess ganz gern, dass es sowas wie undefiniertes Verhalten gibt... 
Und ich wußte auch nicht, dass, wenn kein RAM da ist, auch der Stack 
flöten geht.

Mit 'sowas' meinte ich nebenbei 'wann macht es Sinn den Addressraum des 
RAMs zu begrenzen/ verschieben/ verkleinern'. Ich hatte noch nie auf 
DIESE Linkersettings geachtet - wie du schon sagst, ich hab das noch nie 
gebraucht...
Für nen Bootloader könnte ich mirs noch erklären, aber selbst das wäre 
wüst geraten...

Nochmal danke
Nico

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.