SA0161: Unpacked structure in packed structure
Function | Determines unpacked structures that are used in packed structures. |
Reason | The compiler normally places an unpacked structure on an address that allows aligned access to all elements within the structure. If you create this structure in a packed structure, aligned access is no longer possible, and access to an element in the unpacked structure can lead to a misalignment exception at runtime. |
Importance | High |
Sample:
The structure ST_SingleDataRecord is packed but contains instances of the unpacked structures ST_4Byte and ST_9Byte. This results in a SA0161 error message.
{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_TYPEStructure ST_9Byte:
TYPE ST_9Byte :
STRUCT
nRotorSlots : USINT;
nMaxCurrent : UINT;
nVelocity : USINT;
nAcceleration : UINT;
nDeceleration : UINT;
nDirectionChange : USINT;
END_STRUCT
END_TYPEStructure ST_4Byte:
TYPE ST_4Byte :
STRUCT
fDummy : REAL;
END_STRUCT
END_TYPE