4-62
Projektieren und Programmieren
Zulässige Adressierung
StructInst : OutStruct;
pt : POINTER TO StructInst;
StructInst.Out03 := 2#11110000;
pt := ADR (StructInst);
pt^.Out02 := 16#FF00;
Unzulässige Adressierung
Packen von Strukturen bei IndraLogic L20
Die kompatible Verwendung der Strukturen sieht daher eine direkte
Adressierung der Elemente über den Punkt-Operator vor:
Strukturname.Elementname := Elementwert;
Soll die Adresse einer Struktur über einen Zeiger an unterlagerte
Funktionen übergeben werden, so ist die Adressierung der Elemente
ebenfalls nur durch die Offsetberechnung durch den Compiler zulässig:
Strukturzeiger^.Elementname := Elementwert;
(* Deklaration Strukturinstanz *)
(* Deklaration Zeiger auf Strukturinstanz *)
(* Zugriff auf Strukturelement *)
(* Zeiger-Initialisierung *)
(* Zugriff auf Strukturelement per Zeiger *)
Abb. 4-76: Beispiele
Die Adressierung eines Strukturelements durch Berechnungen im Code
ist unzulässig:
Strukturelementzeiger := ADR (Strukturname.Element);
Strukturelementzeiger := Strukturelementzeiger + n;
Strukturelementzeiger^ := Wert;
Dies ist unzulässig und führt zu Inkompatibilitäten, da die Offsetbildung
zur Adressierung eines Strukturelements durch Berechung im Code nicht
sicher möglich ist. Die Anzahl der Füllbytes ist unter den Plattformen
unterschiedlich.
Während bei der IndraLogic L40 Strukturen immer gepackt, d. h. ohne
Füllbytes im Speicher abgelegt werden, muss dies bei der IndraLogic L20
durch eine entsprechende Compileranweisung (Pragma "pack") bei der
Strukturdeklaration erzwungen werden.
Das Pragma {pack} wird ab der IndraWorks Logic-Version 02V09
unterstützt.
Das Pragma {pack} wird vom Compiler der IndraLogic L40 ignoriert, d. h.
es hat keine Auswirkung auf die Übersetzbarkeit bzw. Lauffähigkeit der
Applikation in der IndraLogic L40.
Beispiel
TYPE Struktur001 :
STRUCT
{pack}
Element_01 : USINT;
Element_02 : DWORD;
Element_03 : BYTE;
Element_04 : INT;
END_STRUCT
END_TYPE
Abb. 4-77: Beispiel für die Compileranweisung pack
IndraLogic L40 03VRS
DOK-CONTRL-IC*L40*****-AW02-DE-P