www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Debugger im Monitor, wie funktioniert das? (generell)


Autor: Christian Berger (casandro) Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie funktioniert eigentlich so ein Debugger im Monitor, wie ihn viele 
Mikrocomputersysteme haben?

Der Monitor muss ja da irgendwie in der Lage sein, einen einzigen Befehl 
im Programm auszuführen oder das Programm an einer bestimmten Stelle 
anzuhalten. Wie wird das gemacht?

Also auf den ATMegas fällt mir spontan nur eine Möglichkeit ein. Man 
sorgt für einen Interrupt der genau nach Bearbeitung der 
Interruptroutine auftritt. So läuft das Programm immer genau einen 
Programmschritt.

Auf vielen Plattformen geht das aber nicht.

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Debug-Logik im µC hat kompletten Zugriff auf CPU, alle Register, 
Speicher usw. Sie kann die CPU einen Schritt machen lassen, 100 
Schritte, neu Starten, Programmzähler mit beliebigen Werten laden, 
Register und Speicherstellen lsen und verändern. Desweiteren kann die 
Hardware-Breakpoints setzen, d.h. wenn der Programmzähler auf einer 
bestimmten Stelle ankommt, wird die CPU angehalten und die Steuerung dem 
Debugger übergeben. Das Debug-Modul ist im Normalfall stark mit der CPU 
verwachsen....

Autor: Christian Berger (casandro) Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das mein ich aber nicht. Das ist ja Hardware debugging. Ich hann aber 
auch auf dem Z80 oder gar dem 8086 debuggen. Da ist (traditionell) keine 
Debug-Logik im Sinne von JTAG o.Ä. drin.

Autor: Bernhard M. (boregard)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Softwaremäßig wird das üblicherweise so gemacht, daß bei Breakpoints der 
Maschinencode an der Stelle des Programms durch einen Sprung in den 
Debugger ersetzt wird. Im Debugger wird dann, wenn dort angehalten 
wurde, wieder der original Maschinencode zurückgeschrieben. Das geht 
natürlich nur, wenn der Programmspeicher verändert werden kann.
Für Einzelschrittausführung besteht noch die Möglichkeit, einen freien 
Interrupt zu verwenden, das geht dann auch, wenn der Programmspeicher 
nicht verwendet werden kann. Man kann da z.B. einen freien Interrupt Pin 
verwenden. Im Debugger sperrt man die Interrupts, schreibt dann auf den 
Interrupt-Pin einen Wert, der den Interrupt auslöst, schreibt die 
auszuführenden Speicheradresse des Programmspeichers als 
Interrupt-Return Adresse auf den Stack und führt einen "Return from 
Interrupt" Befehl aus. Der gibt den Interrupt frei, der Return springt 
and die auszuführende Adresse, führt einen Befehl aus und sprint in die 
Interrupt-Service Routine, die zum Debugger gehört.
Das geht auf den meisten kleineren Prozessoren weil:
- üblicherweise nach einem Return-from-Interrupt immer ein Befehl 
ausgeführt wird und,
- alle Maschinen Befehle atomar sind, d.h. eine Maschinenbefehl kann 
nicht durch einen Interrupt unterbrochen werden (was bei größeren 
Prozessoren, ab 68000, möglich ist).

Diese Varianten habe ich mal auf einen 8051 implementiert, ob das auf 
dem AVR auch funktioniert weiß ich nicht, dort habe ich kene ich die 
Interruptfeinheiten noch nicht so gut..

Gruß,
Bernhard

Autor: Frank Schlaefendorf (Firma: HSCS) (linuxerr)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das wurde zb so gemacht

1. setzen eines haltepunktes im programm, dazu wurde ein spezieller 
sprungbefehl (call, jp oder rst) in den ram geschrieben und der dortige 
op-code gerettet.
2. erreicht das programm den sprungbefehl, führt dieser in das 
debuggingprogramm, in dem alle register und flags gerettet und angezeigt 
werden.
3. auf knopfdruck wird der alte opcode wieder zurückgeladen die register 
und flags wieder restauriert und der restaurierte op-code angesprungen.

Autor: AVRFan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Softwaremäßig wird das üblicherweise so gemacht

Wow, klasse erklärt :-)

Autor: Christian Berger (casandro) Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die guten Erklärungen!

Autor: Marco S. (masterof)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Bernhard

Hi

Willst du nicht den Beitrag in die Artikelsammlung stellen und bei dem 
Artikelschreib-Wettbewerb mitmachen?

Gruß Marco

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.