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
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
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.
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 ;)
Oder einfach zu geeigneter Zeit per Semihosting BKPT 0xAB den ganzen Buffer am Stück raushauen.
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
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
Erik schrieb: > Wie genau funktioniert das? https://sourceware.org/gdb/current/onlinedocs/gdb/Dump_002fRestore-Files.html#Dump_002fRestore-Files
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...
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.
10.18 Copy Between Memory and a File https://sourceware.org/gdb/onlinedocs/gdb/Dump_002fRestore-Files.html
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.