Stack vollschreiben und Size überprüfen



  • Abend,

    wie kann ich mit einer kleinen Routine in C meinen kompletten Stack vollschreiben, so dass ich anschließend überprüfen kann, wieviel Stack mein Programm benötigt (Mikrocontroller); indem ich überprüfe wie oft noch das in den Stack geschriebene Wort noch vorhandne ist?

    Oder ist es besser einen Ptr auf die letzte Addr vom Stack zu legen (global) und abfragen ob dieser überschrieben worden ist... Frägt man diesen Pointer dann nur einmal am schluss vom Programm auf seine Gültigkeit ab?

    Die Startaddr vom Stack ist 0x00200010
    Die Size vom Stack ist 0x00000808

    Patrick



  • Hat der Controller keine Trap für einen Stack-Overflow?



  • Tim schrieb:

    Hat der Controller keine Trap für einen Stack-Overflow?

    Was ist denn ein Trap? Bei dem Controller handelt es sich um einen LPC von Phillips (habs das noch nicht gelesen).

    Patrick



  • Das Ding könnte einen Interrupt auslösen wenn der Stack overflowen tut. Sowas müsste im Manual zu finden sein.



  • Tim schrieb:

    Das Ding könnte einen Interrupt auslösen wenn der Stack overflowen tut. Sowas müsste im Manual zu finden sein.

    Ach so, sowas hat der Prozessor leider nicht... da wird anschließend alles andere einfach mal so überschrieben; angefangen von einem extern angeschlossenen RAM bis zu den Registern im FFFF FFFF Bereich.

    Ich hab zur Zeit Programmaussetzer (Data Aborts) wenn ich mit printf() arbeite - Zeiger wird überschrieben im internen RAM. Ich weiß dass diese Funktion einen großen Overhead hat, aber nicht wie groß dieser wirklich ist. Hab auch einfach mal den Stack um einiges größer gewählt, jedoch hat das nicht zur gewünschten Wendung geführt.

    Patrick



  • sprintf hat zwar viel code, aber der stack-bedarf hält sich in grenzen. welchen LPC hast du da? der 2366 z.b. darf nur mit 60 mhz aus'm flash laufen (statt mit 72) und mit 'MAM' disabled, sonst gibt's merkwürdige data/prefetch aborts.
    🙂



  • lpc fan schrieb:

    sprintf hat zwar viel code, aber der stack-bedarf hält sich in grenzen. welchen LPC hast du da? der 2366 z.b. darf nur mit 60 mhz aus'm flash laufen (statt mit 72) und mit 'MAM' disabled, sonst gibt's merkwürdige data/prefetch aborts.
    🙂

    ich arbeite mit dem LPC2214 mit 60 MHz.

    Wie groß wählt man denn gewöhnlich die Stack Size? Bei mir ist sie bis jetzt 0x00000400 (user stack), 0x00000080 IRQ und jeweils 0x00000008 für alle anderen (die ich nicht verwende)

    Patrick



  • Patrick_Von_Hier schrieb:

    Wie groß wählt man denn gewöhnlich die Stack Size?

    unterschiedlich, kommt z.b. drauf an ob man irgendwelche arrays als auto-variablen hat, verschachtelungstiefe von funktionen, ob man rekursion benutzt usw. für 'normale' programme sind 0x400 eigentlich ausreichend. vielleicht befindet sich dein LPC noch im supervisor mode? (nach dem einschalten ist es so) und benutzt (noch) nicht den user stack?
    btw: --> http://www.arm.com/community/university/eulaarmarm.html
    🙂


Anmelden zum Antworten