3/3 Aufgabe: Zwei Schritte vor, ein Schritt zurück

Aufgabe

In dieser praktischen Übung kannst du den Timeless-Debugger anhand eines Anwendungsbeispiels ausprobieren. Dabei lernst du, wie du im Code zurückspringen kannst, ohne das Programm neu starten zu müssen.

Testdatei herunterladen

Alle Schritte können auch mit einer eigenen Datei durchgeführt werden. Es wird jedoch dringend empfohlen, auf das Dateisymbol zu klicken, um die Testdatei herunterzuladen, welche in dieser Anleitung verwendet wird.

Testdatei laden

Um die Datei in den Editor zu laden, muss du in der heruntergeladenen Testdatei zuerst die Datei mit dem Namen transbf.axf finden. Diese befindet sich im Unterverzeichnis:  sw03/build/transbf.axf Lade diese Datei in den Editor.

Hinweis: Falls du nicht weisst, wie man eine Datei in den Editor lädt, lies die Schritte bitte in der Einführung nach.

Eintrittspunkt in der Testdatei finden

Der Einstiegspunkt in das Programm einer Assemblerdatei ist standardmässig die Main-Methode. In der Testdatei ist das entsprechende Label dafür in der Datei transbf.s. Wähle die Datei in den “Source Files” aus.

Ausgewählte transbf.s Datei

Wenn du das Programm startest (durch Anklicken des Play-Buttons) und die Board-View auswählst, wirst du feststellen, dass das Programm nicht besonders nützlich ist. Es reicht jedoch aus, um die Timeless-Funktionalität zu testen.

Tipp:
Bei grossen Programmen kann es lange dauern, bis das Programm zu einer bestimmten Zeile zurückkehrt. Der Timeless-Debugger ermöglicht es, lokale Probleme zu lösen, ohne dass nachfolgende Änderungen “dazwischenfunken”.

Im Code gibt es einen Abschnitt, der zuerst die Adresse der Dip-Switches in das Register R7 und dann der Inhalt dieser Adresse in das Register R0 lädt. Du kannst den Debugger verwenden, um verschiedene Kombinationen der Dip-Switches auszuprobieren und den veränderten Inhalt des Registers R0 zu beobachten.

  1. Setze zuerst einen Breakpoint bei Zeile 64
  2. Drücke dann den Play-Button, um das Programm bis zu dieser Zeile laufen zu lassen (von dort aus kannst du in den folgenden Schritten hin- und herspringen).
Programmstopp beim gesetzen Breakpoint

Zu diesem Zeitpunkt ist die markierte Zeile noch nicht ausgeführt worden. Dein Programm bleibt also vor dieser Zeile stehen.

  1. Um die Zeile 64 auszuführen, klicke auf den einfachen Pfeil nach rechts.
  2. Im Bereich Runtime-Information siehst du nun, dass im Register R0 der Wert 0x00000000 gespeichert ist.

Wenn der Wert nicht 0x00000000 ist, hast du vermutlich bereits einen oder mehrere Dip-Switches aktiviert. Im nächsten Schritt werden diese sowieso angepasst, du kannst also der Anleitung weiter folgen.

Als nächstes kannst du eine andere Kombination der Dip-Switches ausprobieren, indem du in die Board-View wechselst.

  1. Um diese Änderungen durchzuführen, klicke zuerst auf den einfachen Pfeil nach links (zurück). Dadurch bist du im Programm einen Schritt zurückgegangen! Der Wert für diese Zeile wurde noch nicht in das Register R0 geladen.
  2. Aktiviere die Board-View, indem du auf den Tab neben Runtime-Information klickst.
Aktivierte Board-View-Ansicht

Um nun eine andere Kombination auszuprobieren, kannst du beliebige Dip-Switches aktivieren. 

Konkrete Dip-Switch-Kombination in der die obere linke Reihe vollständig aktiviert ist.

Eine konkrete Kombination erhälst du folgendermassen:

  1. Aktiviere im linken oberen Block alle Dip-Switches.
  2. Gehe zurück in den Tab der Runtime-Information
  3. Gehe einen Schritt weiter, indem du den einfachen Pfeil nach rechts (vorwärts) drückst.

Der im Register R0 gespeicherte Wert muss nun 0xFF000000 sein. Die Dip-Switches sind so angeordnet, dass jeder Dip-Switch ein Bit einer 32-Bit-Zahl repräsentiert. Damit kann jeder Wert zwischen 0 und 2^32 erzeugt werden.

Diese Schritte kannst du nun beliebig oft wiederholen um unterschiedliche Kombinationen auszuprobieren. 

Ende!

Abgeschlossen 100%