Skip to main content

SA0161 : Structure non emballée dans une structure emballée

Détermine les structures non compressées utilisées dans les structures compressées.

Justification : Le compilateur définit généralement une structure décompressée sur une adresse qui permet un accès aligné à tous les éléments de la structure. Si vous créez cette structure dans une structure compressée, l'accès aligné n'est plus possible. De plus, l'accès à un élément dans la structure décompressée peut conduire à une « exception de désalignement ».

Importance : Élevée

Exemple 119. Exemple

La structure structSingleDataRecord est compacté, mais contient les structures non compactées struct4Byte et 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

Sortie dans le messages voir:

  • sa_icon_message.png SA0161 : Déclaration d'une structure décompressée 'struct9ByteData' à l'intérieur d'une structure compressée 'structSingleDataRecord'

  • sa_icon_message.png SA0161 : Déclaration d'une structure décompressée 'struct4ByteData' à l'intérieur d'une structure compressée 'structSingleDataRecord'