Hi
Zu deinem Verständnis: der SRam ist der Arbeitsspeicher deines µC's.
Stell dir ein Blatt Papier vor. Oben schreibst du deine Variablen
hinein, also dort sind die Speicherzellen, die du als Variablen
definiert hast. Z.B.
Mein_Counter: .Byte1
Diese Variablen beeinflußt dein Programm, setzt Werte sozusagen.
Gelöscht wird da nix.
Nun kommt noch der Controller, denn er muß wissen, wo er war, wenn er
auf einen Call trifft oder ein Interrupt ihn aus seiner routinemäßigen
Arbeit abruft. Dazu hat er einen Stack. Das ist der Bereich auf deinem
Blatt Papier von unten. Dort merkt er sich seine Rücksprungadressen und
alles, was ihm per Push zum Merken notwendig erscheint. Dbei setzt er
einfach seinen Adresszeiger auf die entsprechende Speicherstelle und
trägt dort etwas ein. So bei einem Call die nächste routinemäßige
Programmadresse, bei einem Push den Inhalt eines Registers. Findet er
ein Ret (Rücksprung aus Unterprogramm, so holt er sich den Wert aus dem
Stack, so nennt man dden Speicherbereich, und adressiert seinen
Programm- oder Befehlszeiger mit diesem Wert. Ein Pop trägt den Wert vom
Stack in das entsprechende Register ein. Danach wird der Stackzeiger
entsrechend aktualisiert, also hochgesetzt. Man kann also sagen, die
Variablen füllen den Speicher von unten und der Stack von oben abwärts.
Hast du viele Variablen, so bleibt wenig für den Stack übrig, denn wenn
der Controller einen Call sieht, beschreibt er gnadenlos den Stack. und
setzt den Zeiger nach unten. Im schlimmsten Fall überschreibt der Stack
den Variablenspeicher. Wenn du bspw. einen Interrupt hast, der sich
innerhalb seiner Routine wieder aufruft, oder einen Call, der innerhalb
des UP's wieder sich selbst aufruft, hast du nullkommanix den Stach im
Variablenbereich und dein Controller läuft ins Nirwana. Übrigends,
gelöscht wird gar nix, lediglich der Flashvor einer Neuprogrammierung
mit einem Default-Wert geladen ( idR mit 255 dez oder FF hex.) Manche
sagen, das Programm ist gelöscht. Ja, das Programm, aber nicht der
Speicher...
Gruß oldmax