Herunterladen Inhalt Inhalt Diese Seite drucken

Pointer-Adressierung - Bosch Rexroth IndraMotion MLC 13VRS Funktionsbeschreibung

Vorschau ausblenden Andere Handbücher für Rexroth IndraMotion MLC 13VRS:
Inhaltsverzeichnis

Werbung

DOK-MLC***-FUNC****V13-AP06-DE-P
Rexroth IndraMotion MLC 13VRS Funktionsbeschreibung
5.6.3

Pointer-Adressierung

Pointerzugriff auf Einzelvariable
oder Array
Beispiel Pointerzugriff
Pointerzugriff auf Struktur
Beispiel (Natural Alignment)
Big Endian
ADR 10001
2B
ADR 10002
3C
ADR 10003
4D
Tab. 5-5:
Speicherbelegung in Abhängigkeit der Byte Order
Bei der Steuerung IndraMotion MLC werden die Zahlenwerte im
"Big Endian"-Format abgelegt.
Speicher-Alignment und Byte Order müssen bei der Adressierung
von Variablen über Pointer berücksichtigt werden.
Beim Zugriff auf Einzelvariablen oder Arrays sollte immer ein Pointer auf den
jeweiligen Datentyp der Variablen oder der jeweiligen Array-Elemente ver‐
wendet werden. Bei Verwendung eines abweichenden Pointer-Typs, z. B.
Byte-Pointer auf Wort- oder Doppelwort-Variable muss die Byte Order beach‐
tet werden.
Programm:
Variable_01 : WORD;
Array_01 : ARRAY [0 to 10] of DWORD;
ptr_Var_01 : POINTER TO WORD;
ptr_arr_01 : POINTER TO DWORD;
ptr_Var_01 := ADR (Variable_01);
ptr_arr_01 := ADR (Array_01)
Wurde eine Struktur nach der Methode "Natural-Alignment" angelegt, ist eine
Adressierung von Strukturelementen über Pointer, die zur Laufzeit über die
Basisadresse der Struktur und einen entsprechenden Offset berechnet wer‐
den, unzulässig.
Die Offset-Bildung zur Adressierung eines Strukturelements ist nicht sicher
möglich, da sich bei Änderungen der Applikation die Basisadresse der Struk‐
tur und damit Anzahl der Füllbytes ändern kann.
Im Fall des "Natural-Alignment" sieht die kompatible Verwendung der Struk‐
turen 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, ist die Adressierung der Elemente ebenfalls nur durch die
Offsetberechnung durch den Compiler zulässig: Strukturzeiger^.Elementna‐
me := Elementwert;
Programm:
TYPE OutStruct :
STRUCT
Out01 : BYTE;
Out02 : WORD;
Out03 : BYTE;
Out04 : DWORD;
END_STRUCT
END_TYPE
StructInst : OutStruct;
pt : POINTER TO StructInst; (* Deklaration Zeiger auf Strukturinstanz *)
pt2 : POINTER TO BYTE;
pt^.Out02 := 16#FF00;
Bosch Rexroth AG
SPS-Programmierung
Little Endian
00101011
3C
00111100
2B
01001101
1A
(* Deklaration Strukturinstanz *)
(* Deklaration Zeiger auf BYTE *)
(* Zugriff auf Strukturelement per Zeiger *)
237/607
00111100
00101011
00011010

Werbung

Inhaltsverzeichnis
loading

Inhaltsverzeichnis