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?
| Wert | Bereich | Bits | Lage |
|---|---|---|---|
| Temperatur in °C | 0–127 | 7 | Bits 0–6 |
| Druck in kPa | 0–255 | 8 | Bits 7–14 |
| Sauerstoff in % | 0–100 | 7 | Bits 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
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
Ü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