NodeOperatingSystem aktualisiert
@@ -7,13 +7,23 @@ Der Anwender ist frei in der Wahl des Betriebssystem für seine Mikrocontroller-
|
||||
- _kann_ in beliebigen Abständen Pakete mit gemessenen Sensordaten versenden (dafür gibt es spezielle Nachrichten)
|
||||
- _kann_ auf eingehende Pakete reagieren (z.B. reagiert bei mir ein LED-Strip-Controller-Node auf Nachrichten eines Bewegungsmelder-Nodes)
|
||||
|
||||
AqHome liefert für meine eigenen Nodes ein einfaches Betriebssystem mit, das diese Aufgaben erfüllt und leicht erweiterbar ist. Dabei benötigt es nur vergleichsweise wenig FLASH und selbst kaum RAM.
|
||||
AqHome liefert für meine eigenen Nodes ein einfaches Betriebssystem mit, das diese Aufgaben erfüllt und leicht erweiterbar ist.
|
||||
|
||||
Außerdem enthält das System noch einen Bootloader, der das Flashen einer neuen Firmware im Feld über das Inter-Node-Netzwerk erlaubt.
|
||||
|
||||
|
||||
# AqHome-Betriebssystem
|
||||
|
||||
## Übersicht
|
||||
|
||||
Das System weist folgenden Eigenschaften auf:
|
||||
- verwendet keinerlei Verwaltungsstrukturen für Anwendungen oder Treiber, sondern wird nur durch einsortieren von Routinen-Aufrufen organisiert, benötigt dadurch selbst kaum RAM
|
||||
- nur Single-Tasking (würde nur die Komplexizität und den RAM-Bedarf erhöhen)
|
||||
- Ereignis-gesteuert (Ereignisse sind z.B. Timer-Interrupt, eintreffende Nachrichten etc.)
|
||||
- vollständig in Assembler geschrieben
|
||||
|
||||
## Beschreibung
|
||||
|
||||
Das System läuft auf den Mikroprozessor-Geräten (_device_, _node_), es unterscheidet zwischen Modulen (_modules_) und Anwendungen, (_apps_) wobei von beiden jeweils mehrere aktiv sein koennen.
|
||||
|
||||
**Module** sind lowlevel-Code und in erster Linie Treiber für Hardware-Geräte (z.B. den Umweltsensor SI7021) oder für Protokolle. Sie enthalten z.B. auch Interrupt-Handler.
|
||||
@@ -53,9 +63,13 @@ Dadurch muss in der main.asm eines Mikroprozessor-Nodes nur diese Direktive eing
|
||||
> ```
|
||||
>
|
||||
|
||||
Das Betriebssystemselbst besteht eigentlich nur aus einem einfachen MainLoop. Dieser Loop ruft als erstes alle RUN-Funktionen der Module und Anwendungen auf und legt den Prozessor dann schlafen (SLEEP). Aus diesem Schlaf wacht der Prozessor durch einen Interrupt auf. Das ist in der Regel der Timer-Interrupt, der alle 100 Millisekunden ausgelöst wird. Somit schläft das System die meiste Zeit (ausser bei Devices, die viel arbeiten müssen, wie z.B. solche mit graphischem Interface).
|
||||
## Zentraler Loop
|
||||
|
||||
# Device-Hauptanwendung
|
||||
Das Betriebssystem selbst besteht eigentlich nur aus einem einfachen MainLoop.
|
||||
|
||||
Dieser Loop ruft als erstes alle RUN-Funktionen der Module und Anwendungen auf und legt den Prozessor dann schlafen (SLEEP). Aus diesem Schlaf wacht der Prozessor durch einen Interrupt auf. Das ist in der Regel der Timer-Interrupt, der alle 100 Millisekunden ausgelöst wird. Somit schläft das System die meiste Zeit, was den Stromverbrauch senkt.
|
||||
|
||||
## Device-Hauptanwendung
|
||||
|
||||
Die Hauptanwendung eines Device/Node sollte die folgenden Labels enthalten, die vom Betriebssystem außerdem noch aufgerufen werden:
|
||||
|
||||
|
||||
Reference in New Issue
Block a user