Das lernst du heute
- Fehlernummern lesen
- Ursache je Code
- Fehler am Gehäuse auslesen
Die Heizung im Labor bleibt kalt. Am Gehäuse steht Error IncorrectLogicType at line 14. Das Spiel nennt den Fehler beim Namen und die Zeile dazu. Hinter jedem Namen steckt eine feste Nummer, und die Liste ist kurz genug, um sie einmal ganz durchzugehen.
Beim Laden oder beim Laufen
Es gibt zwei Zeitpunkte, an denen ein Fehler auftritt:
- Beim Laden: Bevor der Chip startet, liest er jede Zeile. Ein unbekannter Befehl, eine fehlende Angabe oder ein doppeltes Label halten ihn auf, bevor die erste Zeile läuft.
- Beim Laufen: Die Zeile ist gültig, aber beim Ausführen geht etwas schief, etwa weil am Pin kein Gerät steckt. Der Chip bleibt auf dieser Zeile stehen und versucht sie jeden Takt neu.
Die ganze Liste
| Nr. | Name | typische Ursache |
|---|---|---|
| 0 | None | kein Fehler |
| 1 | Unknown | Fehler ohne eigene Nummer |
| 2 | IncorrectVariable | Name unbekannt: Tippfehler bei alias, define oder Label |
| 3 | IncorrectVariableType | im Spielcode 0.2.6428 ohne Auslöser, kommt also nicht vor |
| 4 | IncorrectLogicType | LogicType falsch geschrieben oder vom Gerät nicht lesbar/schreibbar |
| 5 | IncorrectLogicSlotType | dasselbe für Slot-Typen |
| 6 | IncorrectArgumentCount | Angabe zu viel oder zu wenig, z. B. Batchmodus vergessen |
| 7 | DeviceNotSet | praktisch nie: nur eine ungenutzte Hilfsfunktion wirft ihn. Ein leerer Pin meldet 25 |
| 8 | JumpTagDuplicate | ein Label steht zweimal im Code |
| 9 | UnrecognisedInstruction | Befehl unbekannt, auch bei falscher Großschreibung |
| 10 | IndexOutOfRange | Index außerhalb des erlaubten Bereichs, z. B. ein Pin über d5 |
| 11 | OutOfRegisterBounds | Register über r17, meist bei rr-Umwegen |
| 12 | OutOfDeviceBounds | dasselbe bei dr-Umwegen |
| 13, 14, 15, 21 | IncorrectReagentMode, UnhandledReagentMode, IncorrectReagentDevice, IncorrectReagentType | rund um lr: 14 unbekannter Modus, 15 Modus passt nicht zum Gerät (Required am Ofen). 13 und 21 löst der Spielcode nicht aus |
| 16 | ChipCatchingFire | hcf – der Chip „fängt Feuer“ |
| 17 | StackOverFlow | push über die 512 Plätze hinaus |
| 18 | StackUnderFlow | pop oder peek auf einen leeren Stack |
| 19 | ExtraDefine | derselbe Name zweimal per define |
| 20 | DeviceListNull | Gehäuse hängt an keinem Datennetz, Batchbefehle laufen ins Leere |
| 22 | DeviceNotSlotWriteable | in diesen Slot darf nicht geschrieben werden |
| 23, 24 | ShiftOverflow, ShiftUnderflow | Zahl zu groß oder zu klein für einen Bitbefehl, Bitposition außerhalb |
| 25 | DeviceNotFound | hinter der Angabe steckt kein Gerät: leerer Pin, unbekannte ReferenceId |
| 26, 27 | MemoryNotReadable, MemoryNotWriteable | get/put an einem Gerät ohne passenden Speicher |
| 28, 29, 30 | InvalidStringLength, InvalidStringNull, InvalidStringNonAscii | STR("…") zu lang, leer oder mit Umlaut |
| 31, 32, 33 | InvalidPreprocessHash, InvalidProcessBinary, InvalidPreprocessHex | HASH("…"), %… oder $… nicht lesbar |
| 34 | LogicTypeIsNone | LogicType None benutzt |
| 35, 36 | PayloadOverflow, PayloadUnderflow | Bitfeld bei ext/ins zu lang (35); 36 löst der Spielcode nicht aus |
| 37 | InvalidInteger | an einer Stelle für Ganzzahlen steht etwas anderes |
| 38 | AliasNotFound | ein alias zeigt auf nichts Brauchbares |
Im Alltag begegnen dir vor allem 4, 6, 9, 18, 20 und 25. Die anderen kommen selten vor, aber wenn, dann weißt du jetzt, wo du suchen musst.
Der IC10-Coder zählt die Zeilen wie der Chip ab 0. Steht am Gehäuse line 14, ist es im Editor die Zeile mit der Nummer 14.
Den Fehler von außen sehen
Ein zweiter Chip kann jedes Gehäuse im Datennetz überwachen. Er sieht zwei Werte: Error ist 1, solange das Gehäuse einen Fehler hat, sonst 0. LineNumber ist die Zeile, auf der der Chip gerade steht. Weil ein Chip mit Laufzeitfehler auf der fehlerhaften Zeile stehen bleibt, ist LineNumber dann genau die Fehlerzeile.
define GEHAEUSE HASH("StructureCircuitHousing") # IC-Gehaeuse
lbn r0 GEHAEUSE HASH("Heizchip") Error Average # 1 = Fehler, 0 = laeuft
lbn r1 GEHAEUSE HASH("Heizchip") LineNumber Average # aktuelle Zeile
Error sagt nur ja oder nein. Die Nummer und den Namen des Fehlers bekommst du über das Datennetz nicht, die stehen nur am Gehäuse selbst. Und: Gib dem Wächter einen anderen Namen als dem überwachten Chip. Sonst mittelt lbn über beide Gehäuse.
Schaubild
Übung
Aufgabe
Baue einen Fehlerwächter für das Gehäuse „Heizchip“: Meldet es einen Fehler, geht das Blinklicht „Chipfehler“ an und die Anzeige „Fehlerzeile“ zeigt die Zeile. Ohne Fehler ist das Licht aus und die Anzeige zeigt -1. Ist das Gehäuse abgebaut, gilt das als Fehler: Licht an, Anzeige -1.
Hinweise
Hinweis 1
Error und LineNumber liest du mit lbn und dem Hash von StructureCircuitHousing.
Hinweis 2
Fehlt das Gehäuse, ist Error NaN. snan erkennt das, select macht daraus eine 1.
Hinweis 3
Für die Anzeige zweimal select: erst nach Error, dann nach dem fehlenden Gehäuse.
Quiz
5 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