Fehlerbehandlung: Unterschied zwischen den Versionen

Aus C und Assembler mit Raspberry
Keine Bearbeitungszusammenfassung
Markierung: Manuelle Zurücksetzung
KKeine Bearbeitungszusammenfassung
Zeile 48: Zeile 48:


Solange wir keine andere Möglichkeit haben, einen Fehler zu sehen, werden wir diese Funktion verwenden.
Solange wir keine andere Möglichkeit haben, einen Fehler zu sehen, werden wir diese Funktion verwenden.
{|
|-
| style="width: 33%; text-align:left;" | [[Lass die LED leuchten (PI5)|< Zurück]] || style="width: 33%" | [[Hauptseite|^ Hauptseite]] || style="width: 33%; text-align:right;" | [[Grafik (PI5)|weiter >]]
|}

Version vom 23. Juli 2024, 09:09 Uhr

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 ^ Hauptseite weiter >