Ich verwende MDK-Lite Version 5.23 mit einer STMicroelectronics STM32F072B-Disco "Discovery" -Karte und versuche, das in den Discovery-Beispielen bereitgestellte Flash-Beispiel zu verwenden.
Ich habe dieses Board und diese Toolchain für andere Beispiele verwendet und einige SPI- und GPIO-Arbeiten codiert. Die IDE funktioniert wie ein Champion. Für dieses spezielle Projekt kann ich den Code jedoch erstellen und ausführen, indem ich die Schaltfläche zum Zurücksetzen herunterlade und verwende. Ich kann den Debugger nicht für das Projekt verwenden, sobald ich die Routine HAL_FLASHEx_Erase () verwende. Sobald ich diese Routine ausgeführt habe, öffnet die IDE ein Dialogfeld "Kein Zugriff auf Ziel. Debug-Sitzung wird beendet."
Ich weiß, dass es kein Programmierfehler ist, denn wenn ich den Code herunterlade und ihn dann durch Drücken der Reset-Taste ausführe, funktioniert er. Ich habe denselben Debugger mit einer TI-Karte verwendet und er konnte Flash programmieren und auch Flash-Routinen ausführen. Ich bin mir ziemlich sicher, dass ich den Teil von Flash, in dem der Code gespeichert ist, nicht lösche, also ist es nicht so.
Wenn ich in main.c über diese Zeile gehe
if (HAL_FLASHEx_Erase(&EraseInitStruct, &PageError) != HAL_OK)
dann wird die Debug-Sitzung beendet. Wenn ich stattdessen in dieselbe Zeile gehe und dann jeden der Aufrufe in der Flash-Löschroutine überschreite, funktioniert dies und verlässt schließlich die Routine, und ich kann den Rest des Codes debuggen.
Antworten:
Ich vermute, dass dies ein Netzteil ist, das auf einer bestimmten Ebene zusammenhängt. Entweder die externe Versorgung oder das On-Board-Schalten von Stromschienen.
Um das Szenario zu verdeutlichen, funktioniert das Debuggen nach einem Hardware-Reset einwandfrei. Wenn Ihr Ziel jedoch einen Flash-Block löscht, wird die Debug-Verbindung getrennt.
Beim Debuggen ist es nicht wichtig, dass der Code ordnungsgemäß ausgeführt wird. Sie können sich im Sperrzustand befinden, und das Anhalten des Debugs sollte weiterhin funktionieren. Das einzige, was auf der CPU-Seite das Debugging sperrt, ist ein blockierter AHB-Zugriff. Dies bedeutet, dass das Problem entweder bei der SWD-Schnittstelle zwischen dem STM32F7 und dem integrierten USB-SWD-Schnittstellenchip liegt (vermutlich auch bei einem STM32). Dieses Gerät verfügt über eine integrierte Stromschienenumschaltung, die mich beim ersten Gebrauch der Karte verwirrte.
Es ist erwähnenswert, dass das Löschen von Blitzen den Stromverbrauch des Geräts erhöht. Ist Ihr externes Netzteil dem Job gewachsen und können Sie eine Alternative verwenden?
Bearbeiten: Basierend auf Ihrem Feedback, dass das Überschreiten des fraglichen Codes zum Absturz des Debuggers führt, während dies bei Einzelschritten nicht der Fall ist, denke ich, dass Ihr Problem mit dieser Frage zusammenhängt .
Step-Over wird mithilfe eines Haltepunkts (und der Abfrage des Stopp-Status) implementiert, während Single-Step in der Hardware unterstützt wird. Dies erklärt immer noch nicht, warum der Debugger verwirrt zu sein scheint, lässt jedoch zu, dass der Debugger versucht, auf Code (von Flash) zuzugreifen, während der Flash-Controller aktiv ist.
Basierend auf diesen Beobachtungen würde ich vorschlagen, dass Sie nach dem Löschen einen Haltepunkt festlegen und versuchen, das Auslösen dieses Szenarios zu vermeiden.
quelle