2016-05-18 18 views
4

Dies ist nur eine Frage für das persönliche Interesse. Ich weiß, dass mein JTAG die Registerwerte des uControllers lesen kann. Aber ich habe keine Ahnung, wie das JTAG-Gerät weiß, wann der uController gestoppt werden soll. Ich dachte, dass vielleicht ein Code hinzugefügt wird, der einen Interrupt aufruft, aber Sie können während des Betriebs Breakpoints hinzufügen, daher scheint das falsch zu sein. Also, wie wird es gemacht?Wie funktionieren Haltepunkte auf einem eingebetteten Gerät?

+0

Dies hängt von Ihrer IDE ab. Einige IDE wie uVision ist speziell für die Programmierung in einem Embedded-Gerät entwickelt – Ian

+3

In der Regel durch die Integration mit integrierter Debugging-Hardware. Deshalb werden Sie Einschränkungen sehen, z. 'nur 2 Haltepunkte gleichzeitig', (der Chip hat nur 2 Haltepunktregister), –

+0

Die Frage ist ein bisschen zu weit. Es kommt auf den Debugger, den ICD-Adapter und den Mikrocontroller an. – Lundin

Antwort

5

Wie in einem Kommentar von @Martin James erwähnt, funktioniert die Zielhardware typischerweise so, dass sie die Haltepunkte nativ unterstützt.

Der Debugger verwendet dann die JTAG-Schnittstelle, um On-Chip-Register zur Konfiguration der Breakpoints einzurichten, und das eigentliche "Brechen" wird dann vom Chip selbst vorgenommen.

Dies bedeutet oft, dass die Anzahl der gleichzeitigen Haltepunkte, die Sie haben können, auf eine kleine Anzahl beschränkt ist, da eine begrenzte Anzahl solcher Hardware vorhanden ist.

This link beschreibt zum Beispiel die Debug-Hardware des ARM Cortex-M0 und sagt, dass es (vom Kunden wählbar) 1 bis maximal 4 Hardware-Haltepunkte und bis zu zwei (2) Watchpoints hat. Also, ziemlich stark eingeschränkt (aber als ein tatsächlicher Embedded-Entwickler, ich sehe das und denke "mmmm Hardware Breakpoints, solche Reichhaltigkeit").

+2

Hier gibt es auch eine nützliche Diskussion über [software vs hardware breakpoints] (http://stackoverflow.com/questions/8878716/what-is-the-difference-between-hardware-and-software-breakpoints), sie erklären beide . – Emilien

2

@unwind Erwähnte die Hardware Breakpoints bereits.

Einige MCUs bieten auch einen einstufigen Interrupt/Mechanismus.
Nach jedem Befehl wird der Code gestoppt, aber der Debugger muss nicht jedes Mal für diesen einzelnen Schritt Breakpoints setzen.

Und bei einigen älteren MCU ohne Hardware Breakpoints werden die Breakpoints durch Ersetzen von Anweisungen durch eine Software Interrupt-Anweisung realisiert.
Wenn der Code im Flash residiert, ist dies schrecklich, da der Flash für jeden Haltepunkt neu programmiert werden muss.