SA0161: Struttura disimballata in struttura imballata
Rileva le strutture non imballate che vengono utilizzate nelle strutture imballate
Giustificazione: Il compilatore tipicamente imposta una struttura decompressa su un indirizzo che consente un accesso allineato a tutti gli elementi all'interno della struttura. Se create questa struttura in una struttura compressa, l'accesso allineato non sarà più possibile. Inoltre, l'accesso ad un elemento della struttura non imballata può portare ad una "eccezione di disallineamento".
Importanza: Alta
La struttura structSingleDataRecord
è imballato, ma contiene le strutture non imballate struct4Byte
e 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
Uscita in Messaggi vista:
SA0161: Dichiarazione di una struttura decompressa 'struct9ByteData' all'interno di una struttura compressa 'structSingleDataRecord'
SA0161: Dichiarazione di una struttura decompressa 'struct4ByteData' all'interno di una struttura compressa 'structSingleDataRecord'