SA0161: Ungepackte Struktur in gepackter Struktur
Funktion | Ermittelt ungepackte Strukturen, die in gepackten Strukturen verwendet werden. |
Begründung | Eine ungepackte Struktur legt der Compiler normalerweise auf eine Adresse, die einen ausgerichteten (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 zur Laufzeit zu einer “Misalignment Exception” führen. |
Wichtigkeit | Hoch |
Beispiel:
Die Struktur ST_SingleDataRecord ist gepackt, enthält jedoch Instanzen der ungepackten Strukturen ST_4Byte und ST_9Byte. Dies resultiert jeweils in einer Fehlermeldung SA0161.
{attribute 'pack_mode' := '1'}
TYPE ST_SingleDataRecord :
STRUCT
st9Byte : ST_9Byte; // => SA0161
st4Byte : ST_4Byte; // => SA0161
n1 : UDINT;
n2 : UDINT;
n3 : UDINT;
n4 : UDINT;
END_STRUCT
END_TYPEStruktur ST_9Byte:
TYPE ST_9Byte :
STRUCT
nRotorSlots : USINT;
nMaxCurrent : UINT;
nVelocity : USINT;
nAcceleration : UINT;
nDeceleration : UINT;
nDirectionChange : USINT;
END_STRUCT
END_TYPEStruktur ST_4Byte:
TYPE ST_4Byte :
STRUCT
fDummy : REAL;
END_STRUCT
END_TYPE