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
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_TYPETYPE struct4Byte :
STRUCT
//udiDummy : UDINT;
rRealDummy : REAL;
END_STRUCT
END_TYPEAusgabe unter Ansicht Meldungen:
SA0161: Deklaration einer nicht gepackten Struktur 'struct9ByteData' innerhalb einer gepackten Struktur 'structSingleDataRecord'
SA0161: Deklaration einer nicht gepackten Struktur 'struct4ByteData' innerhalb einer gepackten Struktur 'structSingleDataRecord'