Attribute pack_mode

Übersicht

Das pragma {attribute 'pack_mode'} legt fest, wie eine Datenstruktur während der Zuordnung gepackt wird. Das Attribut muss oberhalb der Datenstruktur eingefügt werden. Es wirkt sich auf das Packen der gesamten Struktur aus.

Syntax

{attribute 'pack_mode' := '<Wert>'}

Der Platzhalter <Wert> kann folgende Werte annehmen:

pack_mode

Verknüpfte Packmethode

0

Ausrichtung

1

1-Byte-Ausrichtung

2

2-Byte-Ausrichtung

4

4-Byte-Ausrichtung

8

8-Byte-Ausrichtung

Je nach der Struktur besteht unter Umständen kein Unterschied in der Speicherzuordnung der einzelnen Modi. So kann die Speicherzuordnung einer Struktur mit pack_mode = 4 beispielsweise derjenigen von pack_mode = 8 entsprechen.

Wenn Strukturen zu Arrays zusammengefügt werden, werden am Ende jeder Struktur Bytes hinzugefügt, um die Ausrichtung der nächsten Struktur zu erreichen.

HINWEIS: Man spricht von einer „natürlichen“ Ausrichtung, wenn 'pack_mode' nicht für eine Struktur verwendet wird oder der Ausrichtung des Prozessors der Steuerung entspricht.

Die Verwendung einer nicht natürlichen Ausrichtung für Strukturen kann bei einigen Steuerungen wie dem ARM zu einer Ausnahme führen, wenn mit einer Variable POINTER auf Elemente solcher Strukturen zugegriffen wird, die nicht ausgerichtet sind (z. B. eine 4-Byte-Variable, die sich an einer Adresse befindet, die nicht durch 4 teilbar ist).

Aus diesem Grund sollten nicht natürliche ausgerichtete Strukturen aus Bibliotheken nicht verfügbar gemacht werden.

Darüber hinaus sollten Sie keine nicht natürlichen ausgerichteten Strukturen innerhalb von Visualisierungsframes verwenden. Kopieren Sie stattdessen diese Strukturen in natürlich ausgerichtete Strukturen, und übergeben Sie sie an Visualisierungsframes.

Beispiel

{attribute 'pack_mode' := '1'}
TYPE myStruct:
STRUCT
 Enable: BOOL;
 Counter: INT;
 MaxSize: BOOL;
 MaxSizeReached: BOOL;
END_STRUCT
END_TYPE

Eine Variable des Datentyps myStruct wird ausgerichtet instanziiert.

Wenn die Komponente Enable die Adresse 0x0100 aufweist, folgt die Komponente Counter an der Adresse 0x0101, MaxSize an der Adresse 0x0103 und MaxSizeReached an der Adresse 0x0104.

Mit pack_mode=2 würde sich Counter an der Adresse 0x0102, MaxSize an der Adresse 0x0104 und MaxSizeReached an der Adresse 0x0106 befinden.