Hallo zusammen Bin gerade daran den RAM Verbrauch meiner Application zu bestimmen. Von der Workbench (IAR) kriege ich im *map-File leider keine verlässlichen Angaben diesbezüglich (nur bezüglich code/constants, ist soweit auch plausibel), da ich ein RTOS benutzte. Auch bezüglich CSTACK nicht, da schreibt IAR sogar im Manual, dass dies die Workbench nicht bestimmen kann... Wie bestimme ich am besten den aktuellen RAM-Speicherbedarf des Systems ohne jedes Byte im Memory abklappern zu müssen? Kennt Ihr geeignete Methoden und Tricks? Grüsse Markus
Lass dir doch den Stackpointer ausgeben. Wenn du dynamisch speicher allozierst mußt du halt mitzählen.
Den Stackbedarf kannst Du ermitteln, indem Du den Speicherbereich des Stacks in der LowLevelInit (vor dem Aufruf von main()) mit fixen Werten initialisierst (z.B. 0xCAFEAFFE or 0xDEADBEEF). Dann kannst Du zyklisch die Adresse ermitteln, bis zu welcher der Stack diese Fixwerte überschrieben hat. Eine belastbare Aussage bekommst Du aber erst, wenn Dein Programm möglichst lange gelaufen ist und möglichst alle Betriebszustände durchlaufen hat. Dieses Verfahren wird u.a. verwendet, um zu überwachen, ob der Stack "übergelaufen" ist und in den Bereich der Variablen schreibt. Bessere µCs haben hierzu eine Stack-Grenzenüberwachung in Hardware (man gibt eine Grenzadresse vor und wenn diese unterschritten wird, gibt's einen Trap).
Danke für die Antworten. Ich hab natürlich nicht nur den Stack, ich habe einerseits mehrere RAM-Speicherbereiche definiert (Stack, Heap, Stack/Heap einer VM, etc.) sowie den Stack eines jeden Tasks. So wie ich gesehen habe, initialisiert IAR den Stack Bereich bereits mit 0xCD... d.h. ich muss wirklich das ganze manuell ermitteln...?!
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.