
|
INFO - FAQ - CC2-Forum - CCPro-Forum |
|
Wie die zusätzlichen "Kunstbefehle" zum Power Line Modem / Remote-IO im einzelnen arbeiten, habe auch ich noch nicht ganz durchschaut. Es handelt sich um Befehle, die ihrerseits aus ganzen Programmsegmenten von Tokenbefehlen aufgebaut sind. Der Retry-Befehl taucht meines Wissen nur im Beispielprogramm NET3.BAS auf. Das recht harmlos aussehende... ' Port setzen ohne Ruecksicht auf Uebertragungsfehler, ' bei gestoertem Netzzugriff wird die aktuelle BASIC-Zeile ' uebersprungen, der Endzustand von p (ON oder OFF) ' ist somit nicht vorhersehbar for x = 1 to 10 p1 = ON p1 = OFF next ...aus NET3.BAS wird vom Compiler CCBASIC in folgendes Token-Ungetüm übersetzt: 003c: 14 00 01 PUSH 1 003f: 19 00 POP BYTEVAR[1] 0041: 14 ff ff PUSH -1 0044: 05 00 ac GOSUB 00ac 0047: 14 00 02 PUSH 2 004a: 20 PUT 004b: 29 AND 004c: 14 00 02 PUSH 2 004f: 20 PUT 0050: 29 AND 0051: 14 00 64 PUSH 100 0054: 05 00 ca GOSUB 00ca 0057: 14 00 01 PUSH 1 005a: 20 PUT 005b: 29 AND 005c: 2b OR 005d: 20 PUT 005e: 20 PUT 005f: 22 GET 0060: 14 00 00 PUSH 0 0063: 04 00 6c IF NOT STACK THEN 006c 0066: 05 00 c7 GOSUB 00c7 0069: 03 00 6f GOTO 006f 006c: 05 00 e0 GOSUB 00e0 006f: 14 00 00 PUSH 0 0072: 05 00 ac GOSUB 00ac 0075: 14 00 02 PUSH 2 0078: 20 PUT 0079: 29 AND 007a: 14 00 02 PUSH 2 007d: 20 PUT 007e: 29 AND 007f: 14 00 64 PUSH 100 0082: 05 00 ca GOSUB 00ca 0085: 14 00 01 PUSH 1 0088: 20 PUT 0089: 29 AND 008a: 2b OR 008b: 20 PUT 008c: 20 PUT 008d: 22 GET 008e: 14 00 00 PUSH 0 0091: 04 00 9a IF NOT STACK THEN 009a 0094: 05 00 c7 GOSUB 00c7 0097: 03 00 9d GOTO 009d 009a: 05 00 e0 GOSUB 00e0 009d: 14 00 0a PUSH 10 00a0: 4a 00 00 ab FORNEXT1 IF BYTEVAR[1]=STACK GOTO 00ab 00a4: 14 00 01 PUSH 1 00a7: 4c 00 00 41 FORNEXT2 ADD BYTEVAR[1],STACK : GOTO 0041 Wenn hingegen Retry verwendet wird... ' Port setzen mit Wiederholung der Anweisung bei ' Uebertragungsfehlern, ' Achtung: ggf. endlos, wenn Remote IO mit Adresse 2 ' ueberhaupt nicht erreichbar ist! for x = 1 to 10 retry p1 = ON retry p1 = OFF next ...ändert sich entgegen meiner Befürchtungen gar nicht so viel. Nur die Zieladressen zweier GOTO-Befehle werden "gepatcht". Und zwar wird das "GOTO 006f" auf Adresse $0069 zu "GOTO 0041" und das "GOTO 009d" auf Adresse $0097 wird zu "GOTO 006f". So weit so gut. Was mich allerdings irritiert, ist die Tatsache, daß dieser Codeteil niemals ausgeführt wird, denn das vorhergehende "PUSH 0" mit nachfolgendem "IF NOT STACK" wird das GOTO immer überspringen, oder sehe ich das falsch? Sollte es sich dabei etwa wieder um einen Fehler im CCBASIC-Compiler handeln? Es ist möglich, daß das "PUSH 0" beim Einsatz von Retry in "PUSH -1" umgeschrieben gehört. Peter, wenn Du mir Deinen Programmcode zuschickst, kann ich die erforderlichen Veränderungen vornehmen und Du kannst testen, ob das Problem dadurch behoben ist. Ich hoffe, Du weißt, wie man eine DAT-Datei mit Hilfe des Downloadtools CCDL.EXE zur C-Control überträgt? Grüße, Dietmar Meine Homepage: http://ccintern.dharlos.de |
| Antwort schreiben |