RAM Monitoring beim Cortex

Gast #4752022
Lesenswert?
• ▲
▼
http://www.lauterbach.com/frames.html?home.html
Wenns wer kann, dann der.

Wir hatten das mal bei einem sehr großen Projekt (Automobil). Allerdings 
hab ich das nur genutzt, ich weiß nicht wie das umgesetzt wurde.
Kostet aber halt ein vermögen.

Theoretisch kann man das auch statisch bestimmen ohne das Programm 
laufen zu lassen. Habe dazu mal ein Paper von ner Konferenz gelesen, ist 
aber bestimmt schon 4 Jahre her.
Gast #4752028
Lesenswert?
• ▲
▼
Kommt drauf an ob du den Heap benutzt und wenn ja, wie. Wenn nicht: 
einfach nur den Stack Pointer auslesen. Wenn doch: Den End Heap Pointer 
auslesen, oder besser die malloc & free Implementierung konsultieren / 
anpassen. Hat mit Cortex M also gar nichts zu tun, sondern nur mit der C 
Library.
(Firma: Torrox.de) #4752033
Lesenswert?
• ▲
▼
Hallo Peter,

Peter S. schrieb:
> gibt es beim Cortex z.B. STM32F4... die Möglichkeit die RAM-Auslastung
> während der Laufzeit darstellen zu lassen?
>
> Welche Hardware/Software wäre dazu nötig?

Die einzigen "Auslassungen", die schwanken können, wären ja die des 
(der) Stack(s) und des heaps. Letzterer ist ein Stück Software, dass in 
der Regel mit Deinem Compiler mitgeliefert wird und dort müsstest Du mal 
in der Dokumentation gucken, ob der dies hergibt.

So ein heap ist aber auch kein Hexenwerk und kann man notfalls auch 
selbst schreiben, um an diese Informationen zu kommen. Neben der Menge 
des freien Speichers, ist meist die Größe des maximal am Stück 
anforderbaren Menge Speicher, als grober Indikator für die 
Fragmentierung des heaps, interessant.

Beim Stack kommt es darauf an, ob Du ein OS verwendest oder nicht. 
Verwendest Du keins, kannst Du den belegten Speicher am stack pointer 
erkennen.

mfg Torsten
Gast #4752041
Lesenswert?
• ▲
▼
Peter S. schrieb:
> gibt es beim Cortex z.B. STM32F4... die Möglichkeit die RAM-Auslastung
> während der Laufzeit darstellen zu lassen?
>
> Welche Hardware/Software wäre dazu nötig?

Methode des Armen Mannes:
-(freien) Speicher zum Zeitpunkt T_0 mit einem definierten Pattern 
beschreiben
-zu einem späteren Zeitpunkt T_1 zellen zählen die diese Muster noch 
enthalten.

-> überschrieben Zellen wurden offenbar im Zeitraum zw. T_0 und T_1 
ausgelastet.
Gast #4752055
Lesenswert?
• ▲
▼
Hallo,

danke für die bisherigen Antworten. Die softwaretechnischen 
Möglichkeiten sind mir bekannt.

Würde jedoch gerne wissen ob es auch eine andere Möglichkeit gibt.
Kann noch jemand etwas dazu sagen ob dies mit einem Lauterbach Gerät 
möglich ist?

Gruß
Peter
Gast #4752076
Lesenswert?
• ▲
▼
Peter S. schrieb:
> Würde jedoch gerne wissen ob es auch eine andere Möglichkeit gibt.

Wie soll das in Hardware gehen? Der Controller sieht nur eine Menge 
Bytes und hat keine Ahnung welche "belegt" oder "frei" sind. Das weiß 
nur die Software (insb. die C-Library und der Linker). Daher ist dieses 
Problem nur durch Software-Anpassung zu lösen. Der Debugger hat damit 
nichts zu tun; höchstens kennt die zum Debugger zugehörige Software die 
genutzte C-Library und weiß deren Datenstrukturen zu interpretieren.
Persönliche Seite #4752113
Lesenswert?
• ▲
▼
Da braucht man keinen Lauterbach für, ein STLink reicht vollkommen :-)

Bevor dein Programm losläuft (bzw. deine Threads starten) einfach den 
Stack (Stackpointer von Offs. 0x00 des Flash Image bzw. die Arrays für 
die Thread-Stacks) mit 0xcc initialisieren (memset() ) und das Programm 
ne Weile laufen lassen.

Achtung: Im main Stack (MSP) steht am Anfang schon was, nicht 
überschreiben, sondern erst dahinter mit 0xcc initialisieren.

Nach beliebiger Laufzeit schaut man sich dann an, wie viel 0xcc nach 
oben hin noch übrig ist.

Das CMSIS-RTOS / RTX zeigt die aktuelle Thread-Stack Auslastung im 
MDK-ARM Debug an.

In meinem System mit RTOS lasse ich mir die Stack Arrays einfach als 
uint64_t Hex Werte im Watch Window anzeigen. So hat man eine recht 
kompakte Übersicht über die Auslastung.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren