Forum: Mikrocontroller und Digitale Elektronik RAM Monitoring beim Cortex


von Peter S. (Gast)


Lesenswert?

Hallo,

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?

Danke

Peter

von ui (Gast)


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.

von Dr. Sommer (Gast)


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.

von Torsten R. (Firma: Torrox.de) (torstenrobitzki)


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

von Bitwurschtler (Gast)


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.

von Peter S. (Gast)


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

von Dr. Sommer (Gast)


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.

von hust (Gast)


Lesenswert?

Ich lasse mir das auf einer HTML ausgeben.
statischen verbrauch, heap , stack ...
aktuelle auslastung der CPU ( FreeRTOS )

gehen tut das..
passendes linker file und ergänzung der funktionen

von Random .. (thorstendb) Benutzerseite


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.

: Bearbeitet durch User
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.