Fehlerbehandlung
Aus C und Assembler mit Raspberry
Da wir bisher keine Möglichkeit haben, Informationen bewusst an uns zu senden, nutzen wir nun die LED, um festzustellen, wenn etwas schiefgeht. Dazu erstellen wir eine Funktion, die über die LED einen Fehlercode anzeigen kann.
Wir erweitern dazu unseren led.s Code mit dieser Funktion:
.globl LED_Error // In w0 = Fehlercode
LED_Error:
mov w10, w0 // Da die Funktion "wait" w0 als Zeit verwendet, müssen wir w0 zunächst sichern
1:
mov w11, #0 // Setze Zähler auf NULL
2:
cmp w11, w10 // Vergleich die Werte mit dem Fehlercode
bhs 3f // Wenn größer, dann verlasse die innere Schleife
bl LED_on // Schalte die LED an
mov w0, 0x100000 // Wir warten 0x100000 Zyklen
bl wait
bl LED_off // Schalte die LED aus
mov w0, 0x100000 // Wir warten nochmal 0x100000 Zyklen
bl wait
add w11, w11, 1 // Erhöhe w11 um 1
b 2b // Wiederhole die Schleife
3:
mov w0, 0x100000 // Warte zusätzlich 0x100000 Zyklen, damit wir den Code vereinzelt sehen
bl wait
b 1b // Wiederhole den Code, bis wir alles abschalten
Um nun diese Funktion zu testen, ändern wir unseren kernel.S Code:
//
// kernel.S
//
.section .text
.globl main
main:
bl LED_off
mov w0, #2
bl LED_Error
b main
Zunächst schalten wir die LED aus. Im Register w0, unserem Übergaberegister, schreiben wir den Fehlercode #2 und springen dann in unsere LED_Error Funktion. Diese wird nun zweimal kurz hintereinander die LED aufleuchten lassen, eine kurze Pause machen und das Ganze wird wiederholt.
Solange wir keine andere Möglichkeit haben, einen Fehler zu sehen, werden wir diese Funktion verwenden.
| < Zurück (Lass die LED leuchten (PI5)) | < Hauptseite > | Weiter (Grafik (PI5)) > |