ATmega: Wie vollen SRAM erkennen!?

Gast #2465602
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
Gast #2465619
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"
Gast #2466728
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren