- Labornetzteil AliExpress         
Ergebnis 1 bis 10 von 18

Thema: Mit goto aus ISR

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.05.2007
    Ort
    Berlin
    Alter
    54
    Beiträge
    765
    Für eine gute Idee fehlen mir immer noch Details. Die Subs sind mir noch zu geheimnisvoll. Wenn diese umfangreich sind, ist die Wahrscheinlichkeit hoch, dass da mindestens eine Schleife vorhanden ist, wo das Flag abgefragt werden kann.
    Wenn das Herz involviert ist, steht die Logik außen vor! \/

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    19.06.2013
    Beiträge
    8
    Zitat Zitat von peterfido Beitrag anzeigen
    Für eine gute Idee fehlen mir immer noch Details. Die Subs sind mir noch zu geheimnisvoll. Wenn diese umfangreich sind, ist die Wahrscheinlichkeit hoch, dass da mindestens eine Schleife vorhanden ist, wo das Flag abgefragt werden kann.
    Die eine Sub sieht so aus:

    Code:
    Sub1:                                                             
       For I = 0 To 7
    Lread1:
          Enable Interrupts
          Config Powermode = Idle     'PCINT0 ist aktiv, bei Flanke wird er geweckt und je nach auf-/absteigender Flanke Edge gesetzt
          Disable Interrupts 
          If Edge = 1 Then
             Goto Lread1
          End If
          Timer0 = 256 - 60
          Start Timer0
          Rotate Inputbyte, Right
          Waitus 15
          Inputbyte.7 = PINB.0
       Next I
       Stop Timer0
    Return
    Ich kann hier einfach so 3-4 Mal die Abfrage des Flags streuen, aber gibt es nicht eine efizientere Methode als das polling des Flags?

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    02.09.2009
    Ort
    Berlin (Mariendorf)
    Beiträge
    1.023
    Zitat Zitat von DasG Beitrag anzeigen
    hier einfach so 3-4 Mal die Abfrage des Flags streuen, aber gibt es nicht eine efizientere Methode
    Das, was bereits geschrieben wurde, ist doch effizient. Die Abfrage auf das Flag zu "streuen" ist nicht hilfreich.

    Was macht wohl der Protokollautomat in dem OneWire-Chip? Der kann auch nur Zeitabstände zwischen zwei Flanken messen (oder vergleichen mit analogem Zeitglied) und bewerten, ob das ein gültiges Bit bzw. Signal war oder nicht; im letzteren Fall ist das ein Grund zum Reset der Kommunikation.

    Ebenso solltest du die Kommunikation aufbauen: Bit für Bit senden und empfangen und immer parallel dazu auf Zeitüberschreitung überwachen. Also nicht irgendwie einstreuen sondern genau jede erwartete Zustandsänderung gegen unerwartete Verzögerungen etc. absichern.

    Wenn OneWire was ähliches wie das Clock Stretching durch den Empfänger bei I2C kennen sollte, muss auch der Sendevorgang entsprechend überwacht werden.

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.05.2007
    Ort
    Berlin
    Alter
    54
    Beiträge
    765
    Code:
    Sub1:
       For I = 0 To 7
    Lread1:
          Enable Interrupts
          Config Powermode = Idle     'PCINT0 ist aktiv, bei Flanke wird er geweckt und je nach auf-/absteigender Flanke Edge gesetzt
          Disable Interrupts
          If Flagbyte <> 1 Then                                 '1 für Sub1, 2 für Sub2, ... 255 für Reset
             Return
          End If
          If Edge = 1 Then
             Goto Lread1
          End If
          Timer0 = 196
          Start Timer0
          Rotate Inputbyte, Right
          Waitus 15
          Inputbyte.7 = PINB.0
       Next I
       Stop Timer0
    Return
    Wobei auch ich den Empfang komplett in einer Timer_ISR erledigen würde. Ähnlich dem DCF Empfang.
    Wenn das Herz involviert ist, steht die Logik außen vor! \/

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    19.06.2013
    Beiträge
    8
    Danke für alle eure Antworten. Bis jetzt siehts erfolgversprechend aus, morgen wird systematisch durchgetestet. Aber ich bin optimistisch

Ähnliche Themen

  1. Sprung aus ISR?
    Von Robtec im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 24
    Letzter Beitrag: 18.12.2009, 11:25
  2. Timer mit ISR programmieren ATTiny2313
    Von Speedfreak-mml im Forum C - Programmierung (GCC u.a.)
    Antworten: 2
    Letzter Beitrag: 12.07.2009, 10:43
  3. Goto vermeidbar? Graphische Menüführung mit Touch
    Von Bauteiltöter im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 8
    Letzter Beitrag: 23.04.2009, 19:25
  4. if then else Schleife möglich mit goto zu verlassen?
    Von mat-sche im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 27
    Letzter Beitrag: 14.04.2009, 09:17
  5. Falscher Rücksprung aus ISR
    Von Furtion im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 10.01.2009, 18:00

Berechtigungen

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

Solar Speicher und Akkus Tests