Gut'n Abend! Ich habe ein kleines Problem.... wie kann ich am sinnvollsten überprüfen wie viel meines Stacks verbraucht wird? Hatte gedacht, dass ganze RAM mit FF zu überschreiben (zu Beginn des main-Programms in der Init-Phase) und nach dem ich alle Funktionen des Gerätes getestet habe mal nachzuschauen was von meinen zuvor ins RAM geschrieben Werten noch erhalten ist. Ist aber nicht so wirklich praktikabel...wie testet ihr sowas.... die default -Einstellung des Compilers ist mir mit 80Bytes zu groß. Benutze eine MSP430..der hat leider nur 256Byte RAM Gruß Dan
Genau, Stackpointer auslesen. Bei jedem "push" auf den Stack prüfen, ob er größer als der größte bisher aufgetretene Wert ist. Falls ja, speichern und weitermachen, wenn nein, eh uninteressant. Am Ende haste die größe verwendete Stack-Adresse.
Hallo Wobei ich die Variante mit dem Speicher-mit-FF-füllen eigentlich besser finde. Weil man da nicht bei jedem push den Stackpointer prüfen muss, sondern am Schluss nochmals drübergehen kann. Wesentlich praktikabler. Gruss Michael
Dan wrote: > Ist aber nicht so wirklich praktikabel...wie testet ihr sowas.... die > default -Einstellung des Compilers ist mir mit 80Bytes zu groß. Benutze > eine MSP430..der hat leider nur 256Byte RAM Das hängt ganz vom Compiler ab. Die Compiler, die ich kenne (WINAVR, Keil C51), stellen den Stack überhaupt nicht ein, sondern nehmen einfach alles, was hinter den Daten frei ist, als Stack. Will man nun die tatsächlich Auslastung des Stacks feststellen, füllt man alles ab Datenende bis zum Stackpointer mit einem Muster, was möglichst selten vorkommt, z.B. 0x77. Zum Testen prüft man dann wieder ab Datenende bis zum ersten Byte != 0x77. Peter
Warum stellt man den Stack nicht auf MAximalwert, also RAMEND (AVR-GCC macht das glaub so) Und in Subroutinen/ISRs liest man einfach mal den SP aus (nachdem lokal Var. angelegt sind), und bildet die Differenz zum RAMEND...? Damit kann man dann was weiß ich machen... Das müsste doch gehen??
Klar geht das. Ist nur ziemlich viel Arbeit jede Funktion dahingehend zu instrumentieren. Den Speicher mit einem Muster füllen und hinterher nachschauen was von dem Muster übrig geblieben ist, ist wesentlich simpler.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.