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

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

Mehrere Werte in einer Zahl

Drei Messwerte in einer Zahl: Felder planen, mit ins packen, mit ext auspacken, negative Werte verschieben und Platz im Stack und in Logikspeichern sparen.

Lektion 18 Min. Woche 41

Das lernst du heute

  • Werte mit ins packen
  • Mit ext auspacken
  • Platz im Stack sparen

Ein Logikspeicher hält genau eine Zahl. Willst du Temperatur, Druck und Sauerstoff eines Raums an einen anderen Chip weitergeben, brauchst du drei Speicher – oder du packst alles in eine Zahl. Mit ins und ext aus der Bitwoche ist das kein Hexenwerk.

Felder planen

Zuerst die Frage: Welchen Bereich hat jeder Wert, und wie viele Bits braucht er?

WertBereichBitsLage
Temperatur in °C0–1277Bits 0–6
Druck in kPa0–2558Bits 7–14
Sauerstoff in %0–1007Bits 15–21

n Bits fassen Zahlen von 0 bis 2^n − 1. Zusammen sind es 22 Bit – weit unter der Grenze von 53.

Packen mit ins

Jeder Wert wird gerundet, auf seinen Bereich begrenzt und dann eingesetzt. clamp sorgt dafür, dass ein Ausreißer nicht ins Nachbarfeld schwappt:

sub wert wert CELSIUSOFFSET
round wert wert
clamp wert wert 0 127     # passt in 7 Bit
ins paket wert 0 7

Auspacken mit ext

Der Empfänger zieht die Felder mit denselben Zahlen wieder heraus:

ext temp paket 0 7
ext druck paket 7 8
ext o2 paket 15 7

Schreib die Feldtabelle als Kommentar in beide Chips. Ändert sich ein Feld nur auf einer Seite, liest der Empfänger Unsinn, ohne dass ein Fehler kommt.

Negative Werte verschieben

Ein Feld kennt keine negativen Zahlen. Auf dem Mars ist es nachts draußen deutlich unter 0 °C. Verschiebe deshalb vorher: °C + 50 macht aus −50 bis 77 °C den Bereich 0 bis 127. Beim Auspacken ziehst du die 50 wieder ab.

Platz im Stack sparen

Der Stack hat 512 Plätze. Ein Verlauf mit drei Werten pro Messung reicht ungepackt für 170 Messungen, gepackt für 512 – dreimal so lang:

push paket                # ein Platz für drei Werte
Achtung

Fehlt der Sensor, wird aus NaN beim Einsetzen 0. Das gepackte Ergebnis sähe dann aus wie „0 °C, 0 kPa, 0 %“ – ein gültiger, aber falscher Messwert. Schreib bei einem Ausfall deshalb eine Zahl, die keine echte Messung sein kann, zum Beispiel −1.

Schaubild

Die Registerbank des Chips r0 42 r1 31 r2 10 r3 -2.5 r4 0 r5 0 r6 0 r7 0 r8 0 r9 0 r10 0 r11 0 r12 0 r13 0 r14 0 r15 0 sp = r16 ra = r17 16 freie Register, je eine Zahl sp: Stapelzeiger · ra: Rücksprungadresse
22 Bit für drei Werte: 7 für die Temperatur, 8 für den Druck, 7 für den Sauerstoff.

Übung

Aufgabe

Packe die Werte des Gassensors „Raum“ nach der Tabelle oben in eine Zahl und schreibe sie in den Logikspeicher „Paket“. Lies das Paket zur Probe zurück und zeige den ausgepackten Sauerstoff auf der Anzeige „Sauerstoff“. Fehlt der Sensor, schreibst du −1 in Speicher und Anzeige.

Hinweise

Hinweis 1

Jeder Wert: lesen, umrechnen, round, clamp, ins an seine Stelle.

Hinweis 2

Sauerstoff: RatioOxygen mal 100, dann Bits 15–21.

Hinweis 3

Zur Probe: Speicher mit lbn zurücklesen und ext aus wert 15 7.

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