stationeers.de Mod-Werkstatt · Dominik1199
EN Anmelden
  1. Start
  2. IC10-Akademie
  3. Tag 284

Tag 284 von 365 · Experte · Monat 10: Bits und Daten

Enum-Werte als Zahlen

Hinter jedem Namen wie LogicType.Temperature oder Color.Red steht eine Zahl: Namensräume als Zahlen lesen, Werte zurückübersetzen und Übersetzungstabellen im Stack bauen.

Lektion 16 Min. Woche 41

Das lernst du heute

  • Namensräume als Zahlen
  • Werte zurückübersetzen
  • Tabellen bauen

Der Akku meldet Mode 2. Was heißt das? Die Anzeige soll keine Zahl zeigen, sondern eine Farbe: rot, orange, gelb, grün. Dazu musst du wissen, welche Zahlen hinter den Namen stecken – und wie du in die andere Richtung übersetzt.

Namensräume sind Zahlen

Jeder Name mit Präfix ist eine Konstante. Der Präprozessor ersetzt ihn nicht, aber der Chip liest ihn als Zahl:

NameZahl
LogicType.Temperature6
Color.Red4
Color.Green2
GasType.Oxygen1
GasType.Nitrogen2
GasType.Air3
SortingClass.Ores9

Fällt dir bei GasType etwas auf? Die Gase sind Bitwerte: Oxygen 1, Nitrogen 2, CarbonDioxide 4, Methane 8. GasType.Air = 3 ist Sauerstoff und Stickstoff – zwei Bits gesetzt. Das ist die Bitwoche, nur im Spiel versteckt.

Achtung

Nackte Namen gelten nur an ihrer typisierten Stelle: l r0 d0 Temperature ist richtig, move r0 Temperature ein Fehler. An Zahlenstellen brauchst du den Präfix: move r0 LogicType.Temperature.

Werte zurückübersetzen

Geräte melden oft einen Zustand als Zahl. Die Bedeutung steht in der Liste der Modi, etwa beim Akku:

ModeBedeutung
0Empty
1Critical
2VeryLow
3Low
4Medium
5High
6Full

Für wenige Werte reicht eine select-Kette. Für viele ist eine Tabelle besser: Der gelesene Wert ist der Index, an dieser Adresse im Stack steht die Übersetzung.

Tabellen bauen

Vor start: legst du die Tabelle einmal mit poke an. In der Schleife liest get … db index den passenden Eintrag:

poke 0 Color.Red       # Empty
poke 1 Color.Red       # Critical
poke 2 Color.Orange    # VeryLow
start:
yield
lbn modus AKKU HASH("Haupt") Mode Average
get farbe db modus     # Modus ist der Index
Achtung

Ein NaN als Index ist gefährlich: Umgewandelt in eine Ganzzahl ergibt er keine gültige Adresse, und get hält den Chip an. Prüfe den Wert vorher mit snan und setze einen sicheren Index, bevor du get benutzt.

Tipp

Die Tabelle kostet sieben Zeilen. Eine select-Kette für sieben Werte wäre doppelt so lang – und jede Änderung an der Farbe müsstest du in der Kette suchen statt in einer Liste.

Schaubild

Der Stack mit Stapelzeiger Platz 0 10 Platz 1 20 Platz 2 30 Platz 3 Platz 4 sp = 3 nächster freier Platz push 40 pop r0 r0 = 30 zuletzt rein, zuerst raus
Der Modus des Akkus ist der Index, die Tabelle im Stack liefert die Farbe dazu.

Übung

Aufgabe

Die Tabelle Modus → Farbe liegt schon im Stack. Lies den Mode des Akkus „Haupt“ und gib auf der Anzeige „Akku“ aus:

  • Setting = Modus, ohne Akku −1
  • Color = Farbe aus der Tabelle, ohne Akku Color.Gray

Bei NaN darf get nicht mit NaN als Adresse laufen.

Hinweise

Hinweis 1

snanz ok modus, dann select modus ok modus 0 – so ist der Index immer gültig.

Hinweis 2

get farbe db modus liest die Farbe.

Hinweis 3

Zum Schluss beide Werte mit select für den Ausfall ersetzen.

Quiz

4 Fragen. Ab 60 % ist das Quiz bestanden – die Auswertung macht der Server.

Tag abschließen

  • Übung im Simulator bestanden
  • Quiz mit mindestens 60 % bestanden

Ohne Konto wird der Fortschritt nur in diesem Browser gespeichert.

Fehler in dieser Lektion melden

Zum Melden bitte anmelden. Anmelden

Esc
↑ ↓ wählenEnter öffnen/ öffnet die Suche überall