Mal wieder ein Wunsch, der unbedingt umgesetzt werden sollte
:
Das "switch-case"-Kommando-Set.
Hintergrund:
Durch das Validierungsschema wird die Programmierung des eibPCs sehr einfach.
Leider fehlt eine Unterstützung für z.B. Abfragen, die "auswählen".
Beispiele sind State-Maschinen oder selektive Bearbeitungen:
[highlight=cpu]
1.
switch ( State ) {
case ( "Init" ): { TCP=connecttcp(); State="Wait_for_Connect" }
case ( "Wait_for_Connect" ): { if TCP==0 or TCP==3 then State="Send_Data" }
case ( "Send_data"): { sendtcp(); State="Close_Connection"}
case ( "Close_Connection"): { closetcp(); State="End"}
case ( "End" ):
case ( default ): { /* nichts tun */ }
}
2.
switch ( Kommando ) {
case ( "RAUF" ): { write( GA1, EIN); }
case ( "RUNTER" ): { write( GA2, AUS); }
case ( "STOP"): { write( GA1, AUS); }
case ( "SCHLIESSEN"): { write( GA3, 100%); }
}
[/highlight]
Insbesondere können durch switch-case auch Stolperfallen umgangen werden, die klassischen Programmierern gerne zum Verhängnis werden, wie im 1. Beispiel das setzen des neuen State bei einem if-then-else problematisch ist.
Folgendes sollte erfüllt sein:

Das "switch-case"-Kommando-Set.
Hintergrund:
Durch das Validierungsschema wird die Programmierung des eibPCs sehr einfach.
Leider fehlt eine Unterstützung für z.B. Abfragen, die "auswählen".
Beispiele sind State-Maschinen oder selektive Bearbeitungen:
[highlight=cpu]
1.
switch ( State ) {
case ( "Init" ): { TCP=connecttcp(); State="Wait_for_Connect" }
case ( "Wait_for_Connect" ): { if TCP==0 or TCP==3 then State="Send_Data" }
case ( "Send_data"): { sendtcp(); State="Close_Connection"}
case ( "Close_Connection"): { closetcp(); State="End"}
case ( "End" ):
case ( default ): { /* nichts tun */ }
}
2.
switch ( Kommando ) {
case ( "RAUF" ): { write( GA1, EIN); }
case ( "RUNTER" ): { write( GA2, AUS); }
case ( "STOP"): { write( GA1, AUS); }
case ( "SCHLIESSEN"): { write( GA3, 100%); }
}
[/highlight]
Insbesondere können durch switch-case auch Stolperfallen umgangen werden, die klassischen Programmierern gerne zum Verhängnis werden, wie im 1. Beispiel das setzen des neuen State bei einem if-then-else problematisch ist.
Folgendes sollte erfüllt sein:
- switch und damit der code des gültigen case, sollte zumindest entsprechend des Validierungsschemas bei Änderung der switch-Bedingung ausgeführt werden (also analog if-then).
- falls für die switch bedingung das Validierungsschema gilt, sollte durch eval() oder after(1u64) oder andere Möglichkeiten die kontinuierliche Auswertung möglich sein.
- das Ändern der switch-Bedingung sollte im gleichen Zyklus nicht zur Ausführung weiterer cases führen.
- ein "Default" case sollte möglich sein
Kommentar