Hallo miteinander, ich würde gerne die Speicherauslastung meines LPC2119 hinsichtlich RAM kontrollieren, damit ich weiß wieviel davon noch frei ist... Als IDE verwende ich µVision3 von Keil und die JTAG Schnittstelle des Controllers.... Weiß zufällig jemand von euch, ob es da eine Möglichkeit gibt? Schöne Grüße
Hallo Christian, die Speicherauslastung siehst Du in erster Linie am Linker Output, oder Map-File oder wie immer man es nennt. Das listet den Speicherbedarf aller Programme. Dazu kommt dann noch der Bedarf des Stack und das ist es dann im grossen und ganzen. Falls das etwas kompliziert aussieht, koennte ein kleiner selbstgemachter Test so aussehen: In der Initialisierung schreibst Du ein Patternmuster in den Speicher bevor Deine Nutzdaten reinkommen, also z.B. 0x5555 ueberall reinschreiben, dann er die eigentliche Speicherinitialisierung. Nachdem Dein Programm eine weile gelaufen ist kannst Du Dir mit einem Debugger Speicherbereiche anschauen, also z.B. mit uVision und ULink. Dort wo nach wie vor die 0x5555 drin steht wurde das RAM nicht benuetzt. Wichtig! Normalerweisse werden im Testbetrieb nicht alle Moeglichkeiten des Programmes genuetzt, daher ist ein solcher Test nur eine Indikation ueber der Speicherbedarf, nicht der absolute Wert. Vielleicht hilfts ja. Moeglichkeiten wie in frueheren Bondout Emulatoren Triggerpunkte auf Speicherzugriffe mit Adressgrenzen einzugeben gibt es in dieser Art bei einem regulaeren JTAG meines Wissens nicht. Robert
Robert Teufel schrieb: > die Speicherauslastung siehst Du in erster Linie am Linker Output, oder > Map-File oder wie immer man es nennt. Das listet den Speicherbedarf > aller Programme. Dazu kommt dann noch der Bedarf des Stack und das ist > es dann im grossen und ganzen. Der Heap könnte ggf. noch dazu kommen. Und falls Du Speicherstellen direkt per Adresse ansprichst (yuck!) wird das vom Linker auch nicht gemeldet. > Moeglichkeiten wie in frueheren Bondout Emulatoren Triggerpunkte auf > Speicherzugriffe mit Adressgrenzen einzugeben gibt es in dieser Art bei > einem regulaeren JTAG meines Wissens nicht. Ähh doch. Im MDK Debugger unter Debug-> Breakpoints zu erreichen. Dort kann man Adressen und Zugriffsgröße, sowie Richtung (lesen/schreiben) angeben. Grundsätzlich unterstützt die ARM Embedded ICE Hardware diese Funktionalität. Ist aber beim ARM7 ob seiner Einschränkung auf zwei Watchpoint units etwas begrenzt. Gruß Marcus http://www.doulos.com/arm/
@Marcus, hast wohl nicht mehr mit Bond-Outs gearbeitet, war vor Deiner Zeit oder :-) Da gab es eine Moeglichkeit zu sagen, wenn irgendein Zugriff im Adressbereich zwischen 0xsomething und 0xsomethingelse stattfindet bitte alles mitprotokollieren (Trace). Das geht meines Wissen auch im Simulator von MDK aber wohl kaum mit U-Link(2). Es ist mir klar, dass man einen Breakpoint auf eine Adressgrenze setzen kann, hilft aber eher wenig. Robert
Robert Teufel schrieb: > hast wohl nicht mehr mit Bond-Outs gearbeitet, war vor Deiner Zeit oder > :-) Gearbeitet -- wohl nicht. Gesehen habe ich die Dinger allerdings noch :-) Aber zum Ermitteln der RAM-Auslastung ist Trace auch etwas aufwändig. Das Lesen des Map files sollte bei typischen MCU Anwendungen bereits ausreichend sein. Selbst wenn man den Speicher dynamisch verwendet (malloc), dann muss die maximale Größe des Heaps ohnehin vorher festgelegt werden. Wird diese Grenze überschritten gibt's einen entsprechenden Rückgabewert (den der OP hoffentlich auch überprüft). Sollte ausnahmsweise die Größe des Stacks nicht statisch ermittelbar sein (z.B. durch Rekursion), dann hilft Dir im Allgemeinen das Überwachen von Speicherzugriffen jenseits des Stackbereiches. Z.B. durch Watchpoints, die man im MDK angeben kann. Gruß Marcus http://www.doulos.com/arm/
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.