Aufgaberverwaltung (Scheduler)
Eine private Website zum Bilder und anderes zeigen ...
K
P

"komplexere" Aufgabenverwaltung und -verteilung

Gegeben war ein Touchscreen, per I2C angesteuert und diverse Sensoren/Aktoren. Ausgabe per I2C dauerte bis zu 500ms, solange wurden in der Hauptschleife keine Tasten,... abgefragt. Oft wurden Tastendrücke "verschluckt"

Lösung:

  • Abfrage von Sensoren/Touchscreen/Tastern in Interrupt-Routinen (entwerder Pin-Change-Interrupt oder timergesteuert abfragen (z.B. 10ms-Raster)
  • je nach gewünschter Reaktion ein Bit setzen
  • in Hauptschleife auf dieses Bit reagieren und Ausgabe anpassen/Aktoren setzen

weiterer Vorteil: I2C-Bus wird nur definiert in Hauptschleife bedient, kein Stören von I2C-Kommunikation durch "Zwischenrufe" aus Interrupts heraus

(Projekt dahinter ist eine Wintergartensteuerung.)

Quelltext-Beispiel:

Dim Scheduler_flag As Integer
Const Secupdate = 0
Const Valueupdate = 1
Const Debugupdate = 2
Const Doclearscr = 3
Const Backtocalling = 4
Const Task5 = 5
Const Prevdisplay = 6
Const Nextdisplay = 7
Const Showalert = 15
Do
    ' - - - - - - - - - - - - - - - - - - - - -
    If Scheduler_flag.doclearscr = True Then
      Scheduler_flag.doclearscr = False
      Call Glcd_clear   ' Ausgabe löschen
    End If
    ' - - - - - - - - - - - - - - - - - - - - -
    If Scheduler_flag.valueupdate = True Then
      Scheduler_flag.valueupdate = False
      Call Updatedatedisplay(1)
    End If
' usw.....  

SecTic:       ' von Timer (Uhrzeit) ausgelöst:
pushall
' div. andere Aktionen
      Scheduler_flag.valueupdate = True ' Ausgabe updaten
popall
return
Achtung: Wenn Sensoren per I2C angebunden sind und das Display (Ausgabe) auch, sollte beides nur in der Hauptschleife abgefragt werden. ggfs per Timer ein Bit setzen, was im nächsten Schleifendurchlauf per den Sensor abfragt...
 
 

Powered by websitebaker, (c) by C. Lotze, based on a design by Chio Maisriml Nutzung der Texte oder Bilder - auch teilweise - nur nach Rücksprache, siehe Impressum!