Ermittelt ungepackte Strukturen, die in gepackten Strukturen verwendet werden.
Begründung: Eine ungepackte Struktur legt der Compiler normalerweise auf eine Adresse, die alignten Zugriff auf alle Elemente innerhalb der Struktur erlaubt. Wenn Sie diese Struktur in einer gepackten Struktur anlegen, dann ist ein alignter Zugriff nicht mehr möglich, und ein Zugriff auf ein Element in der ungepackten Struktur kann zu einer "Misalignment Exception" führen.
Wichtigkeit: Hoch
Beispiel
Die Struktur structSingleDataRecord
ist gepackt, enthält jedoch die ungepackte Strukturen struct4Byte
und struct9Byte
.
{attribute 'pack_mode' := '1'} TYPE structSingleDataRecord : STRUCT str9ByteData: struct9Byte; (* 9 BYTE *) str4ByteData: struct4Byte; (* 4 BYTE *) udi1: UDINT; udi2: UDINT; udi3: UDINT; usi4: USINT; END_STRUCT END_TYPE
(* 9 BYTE *) TYPE struct9Byte : STRUCT usiRotorSlots: USINT; (* 1 BYTE *) uiMaxCurrent: UINT; (* 2 BYTE *) usiVelocity: USINT; (* 1 BYTE *) uiAcceleration: UINT; (* 2 BYTE *) uiDeceleration: UINT; (* 2 BYTE *) usiDirectionChange: USINT; (* 1 BYTE *) END_STRUCT END_TYPE
TYPE struct4Byte : STRUCT //udiDummy : UDINT; rRealDummy : REAL; END_STRUCT END_TYPE --> SA0161: Deklaration einer nicht gepackten Struktur 'struct9ByteData' innerhalb einer gepackten Struktur 'structSingleDataRecord' --> SA0161: Deklaration einer nicht gepackten Struktur 'struct4ByteData' innerhalb einer gepackten Struktur 'structSingleDataRecord'