Warum unterscheidet sich der Konstantentyp in den kompilierten Code wie meine IL-Code?
FAQ #100129
Der Compiler setzt automatisch den richtigen Konstanten Typ, wenn es nicht die Anweisung übereinstimmen.
Im PCD-Befehlssatz gibt es zwei verschiedene Arten von Konstanten: die 32-bit-lange "Constant" und der 14 bit lange "K Konstante" (für genauere Informationen lesen Sie die FAQ #100123 zu diesem Thema) die in einer anderen Weise verwendet werden:
- Einige Anweisungen (z. B. das LOAD Anleitung LD, LDL und LDH) erfordert einen Wert ohne einen Medien-Code. In diesem Fall kann nur eine "Konstante" eingefügt werden. Eine "Konstante K" WAN ' t passen hier denn "K" einen Medientyp.
- Andere Anweisungen (z. B. der CMP-Befehl) erfordert einen Medien-Code. In diesem Fall kann nur die Konstante vom Typ "K Konstante" verwendet werden. Die "Konstante" hat kein Medien-Code also es WAN ' t passen hier.
Trotz dieser Regeln ist es möglich, diese Konstante Typen in den IL-Code zu verwenden, wie Sie wollen. Dies ist nur möglich, weil der Compiler automatisch den falschen Konstantentyp durch die richtige ersetzt. Zum Beispiel:
In IL werden folgende Zeilen geschrieben:
CMP |
R 0 |
0 | |
CMP | R 1 |
K 1 | |
LD | R 2 |
2 | |
LD | R 4 |
K 4 |
Der Code, der nach der Kompilierung in PCD heruntergeladen wird, sieht folgendermaßen aus:
000004 | CMP | R 0 |
000005 | K 0 | |
000006 | CMP | R 1 |
000007 | K 1 | |
000008 | LD | R 2 |
000009 | 2 | |
000010 | LD | R 4 |
000011 | 4 |
Die automatische Korrektur der falschen Konstante Typ, arbeitet auch für die Parameterdefinitions eines FB-Aufrufs. Also ist es möglich, ein "K Konstante" als Parameter eines Aufrufs der FB trotz innerhalb dieser FB, die Parameters bezieht sich eine Anweisung nennt, die einen Parameter vom Typ "K Constante" erlauben nicht definieren:
CFB | 0 | |
R 0 | ||
K 1 | ||
K 2 | Der Compiler ersetzt K 2 mit 2, da... | |
... | ... | ... |
FB | 0 | |
CMP | = 1 | |
3 | | ||
LDL | = 1 | |
= 3 | ... ...ein LDL-Unterricht lässt keine "K-Konstante" |
Natürlich kann die Korrektur nicht erfolgen, wenn der definierte FB-Parameter zweimal innerhalb der FB aufgerufen wird und der zulässige Konstante-Typ anders ist. In dieser Rechtssache PG5-Version > = 1.3 wird die Kompilierung mit einer Fehlermeldung abgebrochen, "FB-Parameter hat schlechte Kontext":
CFB | 0 | |
R 0 | ||
K 1 | ||
... | ... | ... |
FB | 0 | |
CMP | = 1 | Eine CMP-Anweisung erfordert einen Medientyp... |
3 | | ... denn die zweite Codeline | |
LDL | = 1 | Ein LDL-Unterricht lässt keinen Medientyp für die... |
3 | | ... zweite Codeline (aber "= 2" ist eine "K-Konstante") = > Abbrechen |
Beachten Sie, dass im PG5 Versionen < 1.3 der Compiler nicht den Konflikt erkennt was Seltsames Verhalten von Ihr PCD führt!
Categories
Local FAQ Deutschland / SEdit (IL programming)
Last update: 24.05.2015 09:31
First release: 11.06.2004 14:08
Views: 6789