Skip to main content

SA0161: Ungepackte Struktur in gepackter Struktur

Ermittelt ungepackte Strukturen, die in gepackten Strukturen verwendet werden.

Begründung: Eine ungepackte Struktur legt der Compiler normalerweise auf eine Adresse, die einen 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 119. 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

Ausgabe unter Ansicht Meldungen:

  • sa_icon_message.png SA0161: Deklaration einer nicht gepackten Struktur 'struct9ByteData' innerhalb einer gepackten Struktur 'structSingleDataRecord'

  • sa_icon_message.png SA0161: Deklaration einer nicht gepackten Struktur 'struct4ByteData' innerhalb einer gepackten Struktur 'structSingleDataRecord'