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
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"?
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???
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.