Softwaregrundgerüst / Scheduler / Zyklische Tasks
Jede SW-Applikation (Dimmer, Relais, DigIn usw.) besteht aus einer Initialisierungsfunktion und einer zyklisch aufzurufenden (Task-)Funktion. Der Scheduler ist die Softwarekomponente, die einen Grundtakt (10ms) erzeugt, mit dem die zyklischen Tasks einer jeden Applikation nacheinander gestartet werden.
Der Scheduler arbeitet kooperativ, d.h. die Applikationen müssen selbst die Kontrolle zurückgeben und dürfen den Prozessor nicht zu lange beanspruchen. Sind Aufgaben zu erledigen, die eine längeren Ausführung beanspruchen (Größenordnung: >1ms), dann werden diese in Statemaschinen aufgeteilt und die Abarbeitung in kleinere Teile untergliedert.
Die Gesamtzeit der pro Durchlauf auszuführenden Tasks darf 10ms nicht überschreiten, sonst kommt es zu Verzug und die Reaktionszeiten der Software sind nicht mehr vorhersagbar. Falls ein Durchlauf länger als 10ms dauert (weil z.B. besonders viele Funktionen abzuarbeiten waren), dann kann es dazu kommen, daß evtl. empfangene Can-Botschaften nicht mehr ausgewertet werden können und somit verloren gehen. Dies muss unbedingt vermieden werden.
Das Einschalten der Versorgungsspannung oder ein Reset läßt die Software anlaufen. Die Hardware und die Softwareteile werden vor Abarbeitung der zyklischen Tasks zunächst initialisiert. Danach verfällt die Software in eine Endlosschleife, die die Grundfunktionen der Firmware und der Applikationssoftware ausführt.
Die einzelnen Funktionen sind so klar logisch und programmtechnisch von einander getrennt – ihre Ausführung geschieht aber quasi parallel. D.h. die einzelnen verschiedenen Applikationen (z.B. Rolladen und Temperaturmeßstellen) laufen unabhängig voneinander und „gleichzeitig“ ab.
Einige Applikationen verlaufen so langsam, daß sie nicht alle 10ms ausgeführt werden müssen. Für sie reicht ein Aufruf alle 100ms bzw. 1000ms. So reicht es z.B. für die SoftwareUhr, wenn sie im Sekundentakt aufgerufen wird, da ihre kleinste Unterteilung 1s beträgt. Eine häufigere Ausführung brächte keinen Vorteil.
(In diesem Abschnitt wurden folgende Komponenten angesprochen: main, schedule, system)