Forum: Mikrocontroller und Digitale Elektronik ATmega: Wie vollen SRAM erkennen!?


von alexxk (Gast)


Lesenswert?

Hi!
Ich bin gerade auf folgendes Problem gestoßen:
Wie erkenne ich (wenn ich in C programmiere) das der SRAM meines 
Controllers voll ist? Überprüft das der Compiler? Oder kommt es zu 
Abstürzen des Controllers?
Bislang ist es nur eine theoretische Überlegung!
Danke für eure Antworten :)

LG Alex
von Micha .. (micha68) Benutzerseite


Lesenswert?

von Walter S. (avatar)


Lesenswert?

da das RAM auch dynamisch vom Stack benutzt wird kann es der Compiler 
nicht wissen,
den statischen RAM-Verbrauch siehst du an der Linkerausgabe
von Krapao (Gast)


Lesenswert?

Die AVR-GCC Toolchain überprüft mit avr-size den SRAM Bedarf der 
initialisierten Variablen (.data) und der nicht initialisierten globalen 
Variablen (.bss).

Es fehlt aber die Größe des Stackbedarfs zu Laufzeit 
(Rücksprungadressen, lokale Variablen) und des eventuellen Heapbedarfs

Es gibt Ansätze, um diese dynamischen Bereiche abzuschätzen. Entweder 
zur Kompilezeit oder zur Laufzeit: 
Beitrag "StackViewer (RAM Rechner) für WinAVR"
von Krapao (Gast)


Lesenswert?

Sorry mit .bss habe ich mich vertan: http://en.wikipedia.org/wiki/.bss
von Reinhard Kern (Gast)


Lesenswert?

Krapao schrieb:
> Es fehlt aber die Größe des Stackbedarfs zu Laufzeit
> (Rücksprungadressen, lokale Variablen) und des eventuellen Heapbedarfs

Man kann durchaus Stack und Heap auf Überlauf prüfen, wenns der Compiler 
nicht anbietet, muss man notfalls selbst entsprechende 
Unterprogrammaufrufe und Speicherreservierungen in Assembler schreiben, 
die die Speichergrenzen überprüfen. Allerdings nützt das nur was zur 
Fehlerbeseitigung durch den Programmierer, eine fertig ausgelieferte 
Software kann bei Fehlererkennung höchstens gestoppt werden, denn bei 
Speicherüberlauf ist das System so oder so ruiniert, ob man den 
Funktionsaufruf nun abbricht oder falsche Adressen überschreiben lässt.

Immerhin kann man so ein definiertes Anhalten erreichen anstatt eines 
zufälligen "Aufhängens". Ist übrigens ein seltsamer Ausdruck für einen 
Prozessor, aufhängen sollte sich eher der Programmierer.

Gruss Reinhard
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.