Hallo, Jetzt muss ich hier schon wieder nerven, nachdem ich vorhin schon dachte ich hätte einen STM32F103C8T6 mit einer IDE kaputtgemacht... Ich will den RAM des Prozessors auslesen und sehen was wann da drin steht. Leider flasht mir die IDE immer wenn ich versuche Debugging zu starten irgendwas auf den Chip was dann den SWO Port deaktiviert und den Chip solange unbrauchbar macht, bis man ihn durch auf LOW ziehen des RESET Pin und neu flashen der Firmware die drauf gehört wiederbelebt. Jetzt ist die Frage, wie kann ich der Firmware auf dem Chip im RAM zuschauen ohne dass die IDE den vorher flasht. Hab auch schon mal versucht debugging ohne Files im Projekt zu starten, aber das tut mir die Software nicht, die will erstmal was kompilieren und flashen bevor sie Debugging erlaubt. Nun ist die Frage, ist das Absicht oder bin ich zu blöd?
Was willst du den Debuggen ohne Source? Was du brauchst ist ein ICE (InCircutDebugger) Das kann die SWD Schnittstelle bei weitem nicht leisten
Ich will ja lediglich wissen was im RAM drinsteht, wäre auch kein Problem den Chip dazu anzuhalten, nur will eben die CUBE IDE immer erst was Kompilieren und Flashen bevor Debuggen möglich ist. Es müsste doch gehen den RAM auszulesen, im Zweifelsfall wenn man den Chip anhält?
Debug Configurations -> Startup -> Load Image and Symbols Da kannst Du einstellen was er machen soll. Dann ausführen (F8), Register und Speicher sind lesbar. Notfalls musst Du eine andere Startadresse einstellen. Sieh dir einfach die Parameter in "Debug Configurations" an.
Warum auch immer es geht nicht, wenn ich eine neue Konfiguration erstelle ist die Schaltfläche Debug ausgegraut. Anscheinend hat ST da eine Sperre eingebaut die verhindert dass einer den RAM eines Controllers analysiert, von dessen Firmware er den Source Code nicht hat. Werde wohl nicht um ein Gerät von Segger rum kommen, ist zwar gerade total doof, weil ich im Moment pleite bis zum geht nicht mehr bin, aber anscheinend geht das nicht mit dem STlink.
OpenOCD unterstützt ST-Link und kann RAM Adressen lesen (auch zur Laufzeit). Natürlich funzt das nur wenn die Firmware nicht die SWD Pins umprogrammiert...
Die SWD Pins sind offen, aber die CUBE IDE lässt sich einfach nicht davon überzeugen dass sie debuggen soll ohne vorher Quellcode zu haben. Keine Ahnung warum die das so doof programmiert haben, kann mir nur vorstellen dass sie nicht wollten dass darüber einer fremde Firmware analysiert.
Also gut, letzter Hinweis: Nimm irgend ein Blinky Projekt als Grundlage. Spielt keine Rolle, da es bei richtiger Einstellung nicht geflasht wird.
Bastler schrieb: > kann mir nur > vorstellen dass sie nicht wollten dass darüber einer fremde Firmware > analysiert. Sind Verschwörungstheorien ansteckend? Die Debugfunktion in Eclipse möchte ein .elf oder ähnliches file laden, wenn das nicht da ist, dann ist der Button grau. Das ist in Eclipse einfach intransparent und die Internas sind schwer nachzuvollziehen. Deshalb bin ich zu VSCode gewechselt. Die Funktionalität basiert auf dem gdb, den kann man auch aus der Kommandozeile starten und sich an das laufende Target hängen. Wenn man Adressen kennt, dann lassen die sich auch auslesen. Mit der .elf Datei ist das natürlich bequemer weil man dann mit Symbolen arbeiten kann.
Bastler schrieb: > kann mir nur vorstellen dass sie nicht wollten dass darüber einer > fremde Firmware analysiert. Bei dem Wissen das Du hier zeigst, dürften sich Deine Vorstellungen kaum mit der Realität decken. Außerdem ist es unhöflich Vorsatz zu unterstellen, wenn Dummheit als Erklärung ausreicht. Schau Dir die Grundlagen an und lern erstmal mit den Werkzeugen umzugehen bevor Du hier wirre und haltlose Vermutungen äußerst. Dann wird das alles viel Einfacher.
War nur eine Vermutung von meiner Seite, hätte ja sein können.
Bastler schrieb: > Die SWD Pins sind offen, aber die CUBE IDE lässt sich einfach nicht > davon überzeugen dass sie debuggen soll ohne vorher Quellcode zu haben. Wenn du normal mit der CubeIDE Debuggst, dann kannst du dir alle Register und Variablen oder andere Expressions angucken. Die Werte sind sogar so benannt wie du sie in einem #define oder enum benannt hast. Wie soll sie das machen oder Break Points setzen, wenn sich keinen Code und keine Memory Map hat?
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.