AVR ATmega Breakpoints und BREAK-Befehl

Ich verwende AVR Studio 4, JTAGIce MkII-CN, gcc zum Debuggen. Es funktioniert im Allgemeinen gut, aber manchmal passiert es nach einer unspezifischen Unterbrechung (Reset, Aus- und Wiedereinschalten usw.), dass der AVR Studio-Haltepunkt in eine BREAK-Anweisung umgewandelt bleibt und das Programm bei dieser Anweisung immer abbricht und auf keinen Fall übergehen kann (sichtbar im Disassembler-Fenster). ).

Ich kann nicht untersuchen, wo die Anweisung geschrieben ist, da sie sogar den Neustart von MCU, AVR Studio und JTAGICE-Debugger überlebt, der BREAK bleibt dort bestehen. Nur reflashing MCU hilft und ich kann weitermachen.

Ändert die On-Chip-Debugging-Engine den Flash und merkt sich die ursprüngliche Anweisung? Ich bin mir nicht sicher, ob es über das Debuggen hinaus funktioniert, da BREAK wahrscheinlich ignoriert wird und fehlende Originalanweisungen kaum erkennbar sind.

Hinweis: Ich bin mir gerade nicht sicher, was das Ergebnis des Lesens des Flashs und des Vergleichs mit dem Original war.

Antworten (1)

Ändert die On-Chip-Debugging-Engine den Flash und merkt sich die ursprüngliche Anweisung?

Ja und nein. Einige AVR-Controller haben eine begrenzte Anzahl (3?) von "Hardware"-Haltepunkten, die zur Laufzeit dynamisch gesetzt werden können und nicht über das Ende der Debugging-Sitzung (Zurücksetzen, Ausschalten, ...) hinaus bestehen.

Wenn Sie jedoch mehr Breakpoints gesetzt haben, als über diese „Hardware“ verfügbar sind, oder wenn Sie einen Controller ohne diese haben, ersetzt die Debugger-Software tatsächlich die Anweisungen, an denen Ihr Breakpoint gesetzt ist, durch „BREAK“-Anweisungen und werde sie später wiederherstellen. Kein Wunder, dass eine plötzliche Unterbrechung der Debugging-Session den Controller etwas unbrauchbar macht, bis Sie ihn erneut flashen und die künstlich eingeführten "BREAK"s überschreiben.

Dieser Mechanismus wird auch in den AVR-Dokumenten erwähnt, wo angegeben wird, dass diese Art des Debuggens den Flash-Speicher zusätzlich belasten kann: Jedes Mal, wenn ein solcher Haltepunkt gesetzt, entfernt oder getroffen wird, wird ein Teil des Flash neu programmiert den Hintergrund durch die Debugger-Software.

Siehe zB auch hier .