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
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:
SA0161 : Déclaration d'une structure décompressée 'struct9ByteData' à l'intérieur d'une structure compressée 'structSingleDataRecord'
SA0161 : Déclaration d'une structure décompressée 'struct4ByteData' à l'intérieur d'une structure compressée 'structSingleDataRecord'