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

Tag 305 von 365 · Experte · Monat 11: Optimierung und Fehlersuche

128 Befehle pro Takt

128 Ausführungen pro Takt: was jede Zeile kostet, auch Kommentare und Labels, wie lange Schleifen in Portionen aufgeteilt werden und wohin das yield gehört.

Lektion 20 Min. Woche 44

Das lernst du heute

  • Laufzeit pro Takt zählen
  • Lange Schleifen aufteilen
  • yield an der richtigen Stelle

Ein Druckkessel wird überwacht, und gleichzeitig soll der Chip den Mittelwert der letzten 64 Messungen bilden. Die Summe über 64 Werte braucht rund 300 Ausführungen. Läuft sie am Stück, kommt der Überdruck-Alarm erst zwei, drei Takte zu spät. Bei einem Kessel ist das eine Sekunde zu viel.

Laufzeit pro Takt zählen

Der Chip führt pro Takt höchstens 128 Schritte aus. Danach unterbricht er und macht im nächsten Takt an derselben Stelle weiter – ohne Fehler. Im Spielcode ist jeder Schritt eine Zeile: Auch Kommentarzeilen, Leerzeilen und Labels, über die der Chip läuft, kosten einen Schritt.

Zeilekostet
Befehl1
Kommentar- oder Leerzeile im Weg1
Label, das angesprungen oder durchlaufen wird1
yield1, dann ist der Takt vorbei

Eine Schleife mit fünf Befehlen und einem Label kostet also sechs Schritte pro Durchlauf. Für 64 Werte sind das 384 Schritte – drei Takte.

Lange Schleifen aufteilen

Die Lösung: Die lange Arbeit wird in Portionen zerlegt. Jeden Takt läuft ein Stück, und ein Zähler merkt sich, wo es weitergeht. Erst nach dem letzten Stück wird das Ergebnis ausgegeben.

add ende i PORTION
portion:
get tmp db i
add summe summe tmp
add i i 1
blt i ende portion
blt i PLAETZE start        # noch nicht durch: nächster Takt
div tmp summe PLAETZE
sbn ANZ HASH("Mittel") Setting tmp

Acht Werte pro Takt kosten rund 40 Schritte. Nach acht Takten ist die Summe fertig, und der Chip hat in jedem Takt noch genug Luft für alles andere.

yield an der richtigen Stelle

Der schnelle Teil – der Überdruck-Wächter – steht direkt nach dem yield und läuft damit in jedem Takt zuerst. Die Portion kommt danach. Ist eine Portion fertig, springt der Chip zurück zum yield, statt die nächste Portion anzuhängen:

  • Wächter, Schalter, Sicherheit: jeden Takt, vorn.
  • Statistik, Suche, Sortieren: in Portionen, hinten.
  • Ausgabe des Ergebnisses: erst, wenn alle Portionen durch sind.
Achtung

Ohne yield in der Hauptschleife unterbricht der Chip mitten in einer beliebigen Zeile. Die Ausgaben einer Schleife können dann halb fertig sein, und wo der nächste Takt beginnt, hängt von der Länge der Schleife ab. Ein bewusstes yield macht den Ablauf vorhersagbar.

Tipp

Kommentare in einer Schleife kosten jeden Durchlauf einen Schritt. Schreib sie vor die Schleife oder nutze die Spielfassung, die sie entfernt.

Schaubild

Takte und yield auf einer Zeitleiste Takt 0 · 0,0 s Takt 1 · 0,5 s Takt 2 · 1,0 s Takt 3 · 1,5 s 5 Befehle yield 5 Befehle yield 5 Befehle yield 128 Befehle ohne yield: Limit Gerätewerte ändern sich nur zwischen zwei Takten.
Jeder Takt: erst der schnelle Teil, dann eine Portion der langen Arbeit, dann yield.

Übung

Aufgabe

Der Chip überwacht den Kessel „Kessel“ und bildet den Mittelwert der letzten 64 Druckwerte:

  • jeden Takt: Lampe „Druck“ an über 200 kPa oder ohne Sensor, dann den Wert in den Ringpuffer (64 Plätze)
  • danach 8 Pufferplätze aufsummieren; nach allen 64 das Mittel auf der Anzeige „Mittel“ zeigen und von vorn beginnen
  • der Wächter muss in jedem Takt laufen

Hinweise

Hinweis 1

Wächter zuerst: sgt, snan, or, sbn. Danach mit bnan am Speichern vorbei.

Hinweis 2

Portion: add ende i PORTION, Schleife bis ende, dann blt i PLAETZE start.

Hinweis 3

Erst wenn i 64 erreicht, Mittel ausgeben und summe und i auf 0.

Quiz

3 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