mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Auslastung des RAM vom LPC2119


Autor: Christian Wachter (christianw)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Robert Teufel (robertteufel)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Marcus Harnisch (mharnisch) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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/

Autor: Robert Teufel (robertteufel)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Marcus Harnisch (mharnisch) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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/

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.