User Tools

Site Tools


tipps_fuer_die_fehlersuche

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
tipps_fuer_die_fehlersuche [2019/05/31 11:23]
tfischer
tipps_fuer_die_fehlersuche [2019/08/11 11:10] (current)
tfischer [Allgemein]
Line 1: Line 1:
 ====== Tipps für die Fehlersuche (= Debugging) ====== ====== Tipps für die Fehlersuche (= Debugging) ======
  
 +===== Allgemein =====
 +
 +Um die Fehlerursachen zu finden, empfiehlt sich folgendes, generisches Vorgehen:
 +
 +
 +--> 1. Verstehen#
 +Versuchen Sie genau zu verstehen, unter welchen Umständen der fehlerhafte Zustand auftritt. \\ Wie ist dieser zu reproduzieren?​ Ohne Reproduzierbarkeit ist ein Fehler nicht auffindbar!
 +  * Welche Eingaben, Spannungen waren vorhanden?
 +  * Gleicher Fehler bei geänderten Eingaben?
 +  * Prüfen Sie auch vermeintlich klare Dinge
 +
 +Beim Verständnisaufbau hilft manchmal weniger Theorie und mehr ausprobieren. ​
 +
 +**Wichtig**:​ Schreiben Sie auf, was funktioniert und was nicht (am besten mit Ablage des genutzten Codes). Dann lässt sich auch nach einigen Tests nachvollziehen,​ was getan wurde.
 +
 +Und: Ein Fehler der auf mysteriöse Weise wieder verschwindet,​ kommt genauso wieder (i.d.R. wenn keine Zeit mehr da ist). Ein Fehler der nicht korrigiert wurde, wurde nicht korrigiert..
 +
 +--> War die Teilfunktion schon jemals lauffähig?#​
 +Falls die Funktion an anderer Stelle bereits lauffähig war, dann Ja.
 +--> 1.1 Ja, Teilfunktion war schon lauffähig#
 + Gehe zu 2. 
 +<--
 +
 +--> 1.2 Nein, Teilfunktion war noch nie lauffähig#
 +
 +--> 1.2.1 Suchen#
 +
 +Gab es weltweit noch keinen, der diese Teilfunktion implementiert hat? Um das zu beantworten hilft ein Blick in Google. ​
 +
 +Lernen Sie [[Besser Suchen mit Google]]
 +
 +Falls es jemanden gab, so war die Funktion an anderer Stelle bereits lauffähig --> Gehe zu 2. . 
 +
 +
 +<--
 +
 +--> 1.2.2 Reduzieren#
 +
 +Ähnlich Punkt 2. und 3. ist es zielführend Das System soweit zu vereinfachen,​ dass es lauffähig ist, auch wenn die Funktion darunter leidet. ​
 +
 +D.h. im Extremfall das Flashen mit einer leeren main Funktion (Geht das Flashen?) oder mit einer, welche nur einen PIN /  LED aktiviert.
 +
 +<--
 +
 +--> 1.2.2 Kreativ sein#
 +
 +Falls die Teilfunktion noch nirgends implementiert wurde (wirklich?​),​ dann muss etwas mehr Kreativität genutzt werden. ​
 +
 +<--
 +
 +<--
 +
 +<​-- ​
 +
 +
 +<--
 +
 +--> 2. Vermuten#
 +Erstelle eine Hypothese an was der Fehler liegen kann. Dann ist das (fehlerhafte) System leichter über "Teile und Herrsche"​ zu bändigen.
 +<--
 +
 +--> 3. Aufteilen#
 +Breche das System (Hardware und Softwarekomponenten) und die Interaktionen (Schnittstellen,​ Funktionsaufrufe) auf ein Minimum herunter. \\ \\ Alternativ: Breche das System in Teile und prüfe ob die Einzelteile fehlerfrei sind.
 +
 +<--
 +
 +--> 4. Ersetzen#
 +Ersetze Systeme (Hardware und Softwarekomponenten) und die Interaktionen (Schnittstellen,​ Funktionsaufrufe) durch einfachere.
 +
 +  - Vereinfache die Software
 +    - Kompiliert der Beispiel-Code aus der Vorlesung? \\ Kompiliert das gewünschte C-File, wenn alles (includes, variablen, functions), außer main() ausgeblendet wird? 
 +    - Kompiliert eine **einfache Software**, welche eine (wechselnde) Ausgabe beinhaltet (z.B. LED, Port)? \\ Besser einfach beginnen, also nicht mit einem über SPI angeschlossendem Display.
 +  - Vereinfache die Hardware
 +    - Nutze Oszilloskop und Logic Analyzer statt ausgebende Komponenten. ​
 +    - Nutze Funktionsgenerator statt eingebende Komponenten. ​
 +    - Nutze bereits getestete Komponenten.
 +  - Vereinfache die Interaktion
 +
 +<--
 +
 +--> 5. Beobachten und zurück zu Start#
 +Tritt der Fehler exakt gleich auf? \\
 +Welche neuen Hypothesen lassen sich aufstellen?
 +
 +<--
 +
 +--> 6. Bugfixen#
 +Sobald der Bug eingekreist wurde, geht es ans korrigieren. Hier hilft meist die Theorie weiter.
 +
 +**Wichtig:​** Prüfen Sie, ob der Fehler noch auftritt. Ist der Fehler auch bei Variation der Eingaben weg?
 +
 +<--
 ===== Hardware ===== ===== Hardware =====
  
Line 6: Line 98:
   * Ist die Stromversorgung an und richtig eingestellt?​ (z.B. Strombegrenzung nicht auf 0A, kein electric Fuse aktiv)   * Ist die Stromversorgung an und richtig eingestellt?​ (z.B. Strombegrenzung nicht auf 0A, kein electric Fuse aktiv)
   * Falls die Spannung zusammenbricht oder das "​F"​ für Fuse aktiv ist, spricht dies für einen Kurzschluss der Versorgung gegen Masse. Wenn Sie gesockelte Chips haben, können diese entfernt und geprüft werden, ob der Fehler noch anliegt.   * Falls die Spannung zusammenbricht oder das "​F"​ für Fuse aktiv ist, spricht dies für einen Kurzschluss der Versorgung gegen Masse. Wenn Sie gesockelte Chips haben, können diese entfernt und geprüft werden, ob der Fehler noch anliegt.
-  * Sind Messgeräte und Stromversorgung an und richtig eingestellt (z.B. Abschlusswiderstand)+  * Sind Messgeräte und Stromversorgung an und richtig eingestellt (z.B. Abschlusswiderstand)?
   * Passt die Verkabelung?​ Ist Ground korrekt angeschlossen?​   * Passt die Verkabelung?​ Ist Ground korrekt angeschlossen?​
   * Sind die passenden Widerstände an der richtigen Position? Und sind die Dioden in richtiger Richtung bestückt?   * Sind die passenden Widerstände an der richtigen Position? Und sind die Dioden in richtiger Richtung bestückt?
   * Können Spannungen als Zwischenwerte gemessen werden?   * Können Spannungen als Zwischenwerte gemessen werden?
   * Sind die Pins richtig angeschlossen?​ Z.B. Spannungsversorgung am OPV   * Sind die Pins richtig angeschlossen?​ Z.B. Spannungsversorgung am OPV
-  * Fall Sie einen Fehler in der Kommunikation vermuten: verbinden Sie RX mit TX und überprüfen Sie, ob am gleichen Bauteil das korrekte Signal ankommt.+  * Funktioniert das Flashen über das Proggi? Falls nicht:  
 +    * Ist der korrekte USB-Anschluss gewählt?  
 +    * Ist der Fehler auch mit einem anderen Proggi + anderen Kabeln vorhanden?​ 
 +    * Ist in der Schaltung die SPI-Schnittstelle in Verwendung? Sind weitere Bauteile zwischen Programmierbuchse und Controllerpin,​ bzw. zwischen Programmierbuchse und anderen Spannungen (wie GND)?  
 +  * Falls Sie einen Fehler in der Kommunikation vermuten: verbinden Sie RX mit TX und überprüfen Sie, ob am gleichen Bauteil das korrekte Signal ankommt.
  
 ===== Software ===== ===== Software =====
  
 +  * Compiliert der Code?
 +    * Ist die richtige Zielhardware (z.B. ATmega328PB) gewählt?
 +    * Sind bei den eingebundenen Bibliotheken die Randbedingungen der Zielhardware berücksichtigt?​ (z.B. hat der ATmega328PB andere Benamung der I2C und SPI Register, da diese mehrfach vorhanden sind)
   * Wichtig ist, dass Sie zunächst eine Ausgabemöglichkeit schaffen. Die kann ein digitaler (oder analoger) Output Pin oder eine LCD-Anzeige sein. Ohne diese ist eine strukturierte Fehlersuche schwer möglich. Versuchen Sie die Ausgabemöglichkeit als erstes zu programmieren und zu testen.   * Wichtig ist, dass Sie zunächst eine Ausgabemöglichkeit schaffen. Die kann ein digitaler (oder analoger) Output Pin oder eine LCD-Anzeige sein. Ohne diese ist eine strukturierte Fehlersuche schwer möglich. Versuchen Sie die Ausgabemöglichkeit als erstes zu programmieren und zu testen.
   * Wenn Sie zur Fehlersuche Ihr Programm ändern, machen Sie eine Sicherungskopie des Programms. Weiterhin sollten Sie die zur Fehlersuche geänderten Zeilen markieren (z.B. mit dem Kommentar DEBUGGING!)   * Wenn Sie zur Fehlersuche Ihr Programm ändern, machen Sie eine Sicherungskopie des Programms. Weiterhin sollten Sie die zur Fehlersuche geänderten Zeilen markieren (z.B. mit dem Kommentar DEBUGGING!)
tipps_fuer_die_fehlersuche.1559301805.txt.gz · Last modified: 2019/05/31 11:23 by tfischer