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