Forum: Compiler & IDEs Eclipse: Array aus MC-Speicher abspeichern


von Erik (Gast)


Lesenswert?

Hallo zusammen,

ich benutze die auf Eclipse basierende Entwicklungsumgebung "Dave" von 
Infineon zur Entwicklung eines Mikrocontrollerprogrammes.
Ich habe eine Messwerterfassung und Auswertroutine realisiert,
nun liegt das Ergebnis, ein Array mit 2048 Einträgen, im Speicher des 
MCs vor. Über das Debug-Interace kann ich mir einzelne Werte anzeigen 
lassen;
um das Ergebnis bewerten zu können, muss ich es u.a. plotten.
Das MC-Board hat keine Schnittstelle (UART oder USB) über die
ich das Array an einen PC übertragen könnte.
Mein einziger Zugang zu dem Controller ist über das Programmiergerät.
Gibt es die Möglichkeit, das Array aus der Debug-Umgebung von Eclipse 
heraus z.B. in einer Text- oder CSV-Datei abzuspeichern?

Erik

von Oliver S. (oliverso)


Lesenswert?

Wenn hinter Dave ein gdb werkelt, kannst du dir von dem auch ganze 
Speicherbereiche ausgeben lassen, und bequemerweise auch 
Variableninhalte. am einfachsten machst du das über die Kommandozeile, 
und den Output gleich in eine Datei umleiten.

Oliver

von Erik (Gast)


Lesenswert?

Wie genau funktioniert das?

von hp-freund (Gast)


Lesenswert?

Oliver S. schrieb:
> Wenn hinter Dave ein gdb werkelt,

https://sourceware.org/gdb/onlinedocs/gdb/Dump_002fRestore-Files.html

Damit kannst Du die bin Datei erstellen.
Diese dann mit einem kleinen C Programm (bzw. deiner Vorzugssprache) in 
das gewünschte Format bringen sollte nicht allzu schwer sein.

von hp-freund (Gast)


Lesenswert?

Wobei, ein System das Daten sammelt, verarbeitet und sie dann nicht 
ausgeben kann??

Na ja ...

Ist nicht noch ein Pin frei?
Zur Not ein Soft UART Tx, der beim Start einfach die Daten seriell 
ausgibt sollte die Benutzerfreundlichkeit wesentlich steigern ;)

von Bernd K. (prof7bit)


Lesenswert?

Oder einfach zu geeigneter Zeit per Semihosting BKPT 0xAB den ganzen 
Buffer am Stück raushauen.

von Erik (Gast)


Lesenswert?

Danke für die Antworten, ich kenne mich mit dem gdb aber nicht gut genau 
aus, um diese anwenden zu können.

Zu der Situation: Ich arbeite mit einer gegebenen Hardware und 
implementiere eine Routine zur Detektion eines bevorstehenden Ausfalls 
einer Komponente.

Ganz ohne die Debugumgebung komme ich nicht aus, weil ich dem Controller 
erstmal durch Registerzugriffe eine bestimmte Situation vorgaukeln muss. 
Dann erfasst dieser Messdaten und startet mehrere Verarbeitungsschritte, 
anhand deren Ergebnis entschieden wird, was er meldet.
Ich gehe nun die gesamte Kette von Messdaten, Verarbeitungsschritten, 
Entscheidungsfindung Schritt für Schritt durch und rechne die 
Zwischenergebnise im PC nach.
Ich muss genau die Messdaten/Zwischenergebnisse verwenden, die der MC 
verwendet.

>Ist nicht noch ein Pin frei?
"Pins" hat das Ding keine, nur Balls und an die komme ich nicht ran.

>Oder einfach zu geeigneter Zeit per Semihosting BKPT 0xAB den ganzen
Buffer am Stück raushauen.
Ich habe während des Debuggens zwar eine Konsole, kann dort aber keine 
Eingaben tätigen.

Ich behelfe mir damit, die in hunderter Blöcken eingeteilen Arrays 
manuell in die Zwischenablage zu kopieren und in einem Editor zu einer 
Datei zu verwursten, die Matlab lesen kann.
Das ist mühsam und Eclipse braucht sehr lange um gerade mal 2048 Werte 
in die Zwischenablage zu kopieren (->viele Kaffeepausen). Das geht auch 
häufig schief.

Ich habe gehofft, dass es eine Funktion zum Abspeichern der Werte oder 
irgendeinen anderen Trick unter Eclipse gibt (die Daten liegen dort ja 
vor) als über die Zwischenablage;
zumal ich wahrscheinlich nicht der Erste mit dem Problem bin.

Danke für die Hilfe!

Erik

von hp-freund (Gast)


Lesenswert?

Du verrätst uns ja leider nicht um welchen Debuger es sich handelt, also 
rate ich mal: J-Link ?

Wenn dem so ist:
https://www.segger.com/j-link-software.html

darin dann:
https://www.segger.com/j-link-commander.html

und:
https://www.segger.com/jlink-jmem.html

von Markus F. (mfro)


Lesenswert?


von Vincent H. (vinci)


Angehängte Dateien:

Lesenswert?

Sobald man am GDB hängt spielt es überhaupt keine Rolle welchen Debugger 
man nutzt, ein memory dump ist auf jeden Fall möglich. Und bei 
lächerlichen 2k geht sich dazwischen mit Sicherheit kein Kaffee aus...

Zur GDB Konsole innerhalb von Eclipse kommst du mit dem "Display 
Selected Console" Button. Innerhalb der Konsole dann einfach den 
Dump-Befehl reinklopfen. (siehe Bild)

Was in solchen Fällen übrigens enorm hilft ist sich den entsprechenden 
Befehl vorher via printf ausgeben zu lassen! Da schmeißt du die Anfangs- 
und Endadressen die du brauchst einfach rein und lässt dir den Befehl 
als String irgendwo anzeigen. Wesentlich einfacher als jedes mal alles 
tippen...

von Falk B. (falk)


Lesenswert?

Man könnte die Werte in den internen EEPROM schreiben (wenn vorhanden) 
und diesen normal rücklesen. Würde zumindest beim AVR funktionieren. 
Oder einfach im Debugger ein Fenster mit Anzeige des Rams öffnen und 
dann dort die Werte rauskopieren.

von Bernd K. (prof7bit)


Angehängte Dateien:

Lesenswert?


von Erik (Gast)


Lesenswert?

Ich bedanke micht sehr!

Der Debugger ist ein Segger Jlink pro.
Mit JMEM sich in den laufenden Debugger einzuklinken funktionierte auf 
meinem Rechner nicht.

Ein EEProm hat der Controller keines.

Mit der Konsole in Eclipse und "dump" die Speicherbereich in eine 
Textdatei zu kopieren läuft.

An die Möglichkeit mit "append" den Weg umgekehrt zu gehen und von einer 
Datei direkt in den Speicher zu schreiben hatte ich vorher gar nicht 
gedacht.
Es vereinfacht es, die Implementierung im MC mit Testdatensätzen zu 
prüfen ohne diese vorher im Quelltext abzulegen und neu kompilieren zu 
müssen.

Ich muss mir noch ein kleines Programm schreiben, um die Werte zu aus 
der Datei interpretieren, dann bin ich den Schritt wieder voran 
gekommen.

Ich bedanke mich für die Hilfe, ihr habt mich sehr nach vorne gebracht!

Erik

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.