Forum: Mikrocontroller und Digitale Elektronik Auslastung des RAM vom LPC2119


von Christian W. (christianw)


Lesenswert?

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

von Robert T. (robertteufel)


Lesenswert?

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

von Marcus H. (mharnisch) Benutzerseite


Lesenswert?

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/

von Robert T. (robertteufel)


Lesenswert?

@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

von Marcus H. (mharnisch) Benutzerseite


Lesenswert?

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
Noch kein Account? Hier anmelden.