Perché è diverso come nel mio codice IL tipo di costante nel codice compilato?
FAQ #100129
Il compilatore imposta automaticamente il corretto tipo di costante se non corrisponde all'istruzione.
Nel set di istruzioni PCDs ci sono due diversi tipi di costanti: il 32 bit lungo "costante" e i 14 bit lunghi "costante K" (per informazioni più precise, leggere le FAQ #100123 a questo argomento) che vengono utilizzati in modo diverso:
- Alcune istruzioni (ad esempio le istruzioni di caricamento LD, LDL e LDH) richiede un valore senza un codice di media. In questo caso può essere inserita solo una "costante". Una "Costante K" WAN ' t adatta qui perché "K" è un tipo di supporto.
- Altre istruzioni (ad esempio l'istruzione-CMP) richiede un codice di media. In questo caso può essere utilizzata solo per la costante di tipo "K costante". La "costante" non ha nessun codice di mezzi così esso Wan ' t adatta qui.
Nonostante questa regole è possibile utilizzare questo tipi costanti nel codice IL come si desidera. Questo è possibile solo perché il compilatore sostituisce il tipo sbagliato di costante di quella giusta automaticamente. Per esempio:
In IL sono scritti seguenti linee:
CMP |
R 0 |
0 | |
CMP | R 1 |
K 1 | |
LD | R 2 |
2 | |
LD | R 4 |
K 4 |
Il codice che verrà scaricato in PCD dopo compilazione assomiglia a questo:
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 |
La correzione automatica del tipo sbagliato di costante funziona anche per il parameterdefinitions di una chiamata di FB. Cioè è possibile definire un "K costante" come parametro di una chiamata FB nonostante all'interno di questo il parametro di riferimento è chiamata da un'istruzione che non consente un parametro di tipo "K Constante" di FB:
CFB | 0 | |
R 0 | ||
K 1 | ||
K 2 | Il compilatore sostituisce K 2 con 2, perché... | |
... | ... | ... |
FB | 0 | |
CMP | = 1 | |
= 2 | ||
LDL | = 1 | |
= 3 | ... .a LDL-istruzione non consente la "costante K" |
Naturalmente la correzione non può essere fatto se il FB-parametro definito viene chiamato due volte dentro il FB e la costante-tipo consentito è diverso. In questa caso PG5 versione > = 1.3 interromperà la compilazione con un messaggio di errore "parametro FB ha contesto male":
CFB | 0 | |
R 0 | ||
K 1 | ||
... | ... | ... |
FB | 0 | |
CMP | = 1 | Una CMP-istruzione richiede un tipo di supporto... |
= 2 | ... .for la seconda codeline | |
LDL | = 1 | Un'istruzione di LDL non consente un tipo di supporto per il... |
= 2 | ... Second codeline (ma "= 2" è un "K costante") = > abortire |
Nota che nelle versioni PG5 < 1.3 il compilatore non rileverà il conflitto cosa provoca strani comportamenti del vostro PCD!
Categories
Local FAQ Deutschland / SEdit (IL programming)
Last update: 24.05.2015 03:58
First release: 11.06.2004 14:08
Views: 6774