Forum: Mikrocontroller und Digitale Elektronik Stackauslastung ermitteln


von Ehren (Gast)


Lesenswert?

Hallo zusammen,

ich möchte gerne einen Stackoverflow vermeiden. Zudem möchte ich auch 
nicht zuviel Ram verschenken. Ich weiß die Startadresse und Größe des 
Stacks.
Kann ich dieses Bereich vorinitialisieren (z.B. 0xCAFEAFFE) und nach 
einiger Zeit (Debugger) diesen Speicherbereich lesen und dann behaupten, 
der Bereich, der nicht überschreiben wurde ist mein freier 
Stack-Bereich???

Vielen Dank im voraus!

Gruß
Ehren

von Karl H. (kbuchegg)


Lesenswert?

Ehren schrieb:
> Hallo zusammen,
>
> ich möchte gerne einen Stackoverflow vermeiden. Zudem möchte ich auch
> nicht zuviel Ram verschenken. Ich weiß die Startadresse und Größe des
> Stacks.
> Kann ich dieses Bereich vorinitialisieren (z.B. 0xCAFEAFFE) und nach
> einiger Zeit (Debugger) diesen Speicherbereich lesen und dann behaupten,
> der Bereich, der nicht überschreiben wurde ist mein freier
> Stack-Bereich???

Kannst du.
Nur musst du sicher sein, dass dein Ermittlungs-Programmlauf so ziemlich 
der Worst-Case Fall ist. D.h. du überlegst, in welchem Szenario du die 
tiefsten Funktionsschachtelungstiefen mit der größten Stackbelastung 
erhalten wirst. Und den testest du dann auf jeden Fall ebenfalls.

Wenn es ISR gibt, dann sollten die natürlich auch in deinen Testläufen 
auftauchen. Im Idealfall genau dann, wenn du die durch Funktionen 
erzeugte Stackbelastung auf die Spitze getrieben hast.

von Ehren (Gast)


Lesenswert?

Hey,

gibt es noch andere Möglichkeiten?

Gruß Ehren

von Falk B. (falk)


Lesenswert?


von Steffen R. (steffen_rose)


Lesenswert?

Karl Heinz schrieb:
> Wenn es ISR gibt, dann sollten die natürlich auch in deinen Testläufen
> auftauchen. Im Idealfall genau dann, wenn du die durch Funktionen
> erzeugte Stackbelastung auf die Spitze getrieben hast.

Genau. Besser ist evtl. den Stackbedarf der ISRs, welche gleichzeitig 
aktiv sein können (nested Interrupts möglich?) einfach extra 
dazurechnen.

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.