Skip to main content

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

Esempio 119. Esempio

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:

  • sa_icon_message.png SA0161: Dichiarazione di una struttura decompressa 'struct9ByteData' all'interno di una struttura compressa 'structSingleDataRecord'

  • sa_icon_message.png SA0161: Dichiarazione di una struttura decompressa 'struct4ByteData' all'interno di una struttura compressa 'structSingleDataRecord'