- Labornetzteil AliExpress         
Ergebnis 1 bis 6 von 6

Thema: I²C und der Deadlock bei Atmel 8Bitter mega. Ein Lösungsvorschlag

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.695
    Zitat Zitat von Klebwax Beitrag anzeigen
    ... 2. Auf eine Statusänderung ohne Timeout zu warten, ist eigentlich ein grober Programmierfehler ...
    Hmmmmm. Soweit ich es sehe, huscht diese "while (Bedingung)"-Version aber eifrig durch unsere Wohnzimmer. Z.B. bei PFleurys I²C-Routine, vermutlich auch bei anderen. Wie kommerzielle Routinen aussehen weiß ich nicht. Die Konsequenzen dieses Abfrageroutine waren mir mit meiner eher geringen Programmiererfahrung garnicht klar. Egal - jetzt klappts für meine Bedürfnisse ganz gut. Übrigens ist in der FleuryLibrary auch im stop-Befehl (und anderen) eine solche while-Schleife . . .
    Ciao sagt der JoeamBerg

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.03.2011
    Beiträge
    1.899
    Nun ja, der Teufel steckt wie überall im Detail.

    Nehmen wir mal ein UART. Dort wird oft gewartet, bis ein Byte fertig gesendet ist. Dies könnte man auch mit einem Delay erledigen, dazu sollte man aber schlauerweise die Zeit über die Baudrate ausrechnen. Besser ist natürlich, den UART selbst zu benutzen, also auf den Status zu warten. Kann es einen externen Grund geben, daß das Status-Bit nicht kommt? Nein, ein UART sendet auch in eine defekte Hardware. Kann es einen internen Grund geben, daß das Bit nicht kommt? Schon, wenn man vergisst, den UART zu intialisieren. Will man diesen Fall in seine Fehlerbehandlung mit einbeziehen (wenn man z.B. eine Library schreibt, totale Noobs sie einsetzen um sie dann Schrott zu nennen) wäre ein Timeout eine Möglichkeit (es gibt aber mehr). Ist man sicher, daß dieser Fall nicht eintritt, ist es sicher legitim ohne timeout zu loopen.

    Wie intensiv man sich solchen Überlegungen widmen sollte, hängt natürlich vom Projekt ab. Ob die Software bei einem kleinen Robotor hängt, oder ob ein 400kg Kettenfahrzeug (aus einem anderen Thread) außer Kontrolle gerät macht schon einen Unterschied.

    MfG Klebwax
    Geändert von Klebwax (16.12.2012 um 22:41 Uhr)
    Strom fließt auch durch krumme Drähte !

  3. #3
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.695
    ... UART ... oft gewartet ... könnte man ... Delay ... über die Baudrate ausrechnen ...
    Ne Abstimmumg der Wartezeit mit der Kommunikationsgeschwindigkeit hatte ich beim I²C schon versucht - die oben erwähnte Warteschleife mithilfe des TWBR dimensioniert. Da ja Störungen nur sehr schwer realistisch zu simulieren sind, weiß ich nicht ob das besser ist.

    Dummerweise hatte ich mich sowieso zu früh über meine for(..-Schleifenlösung gefreut.
    ... Auf eine Statusänderung ohne Timeout zu warten, ist eigentlich ein grober Programmierfehler ...
    Das würde ich auch so sehen. Aber (wie gesagt, ich hatte zu schnell meine Deadlocklösung gepostet) Atmel siehts anders, Beispiel Wait for TWINT Flag set :
    Zitat Zitat von Dokumentation 8272D ... 05/12 ... mega164A...1284/P, Seite 220, Mitte, C example
    ... while (!(TWCR & (1<<TWINT))) ; ...
    Und ich denke, dass diese Leute schon deutlich besser C können als ich. Dumm! Nun glaube ich die Lösung zum Deadlock bei I²C eher in der Art wie Robert es vorschlägt - einen Störfall in dieser Umgebung besser mit einer externen Maßnahme, z.B. einem äußeren Limit, abfangen . . .

    Schade, der Schnellschuss war zu früh, läuft u.a. auf meinen eigenen Ratschlag raus: rtfm. Und eben VORHER lesen, dann posten.
    Ciao sagt der JoeamBerg

Ähnliche Themen

  1. Controllerboard für Mega 16, Mega 32 und Mega 644
    Von Teslafan im Forum Konstruktion/CAD/3D-Druck/Sketchup und Platinenlayout Eagle & Fritzing u.a.
    Antworten: 4
    Letzter Beitrag: 02.05.2009, 00:01
  2. Welche Quarze bei ATMEL 8, 16 und 32
    Von Skynet im Forum AVR Hardwarethemen
    Antworten: 2
    Letzter Beitrag: 07.12.2008, 15:55
  3. Atmel Mega 8 und 7 Segment Anzeige
    Von Mr Bean im Forum AVR Hardwarethemen
    Antworten: 4
    Letzter Beitrag: 27.04.2007, 20:01
  4. At mega 32: Interrupt bei steigender UND fallender Flanke
    Von electrofux im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 05.10.2006, 10:52
  5. Antworten: 7
    Letzter Beitrag: 04.10.2006, 16:06

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen