SA0161: Estructura no empaquetada en estructura empaquetada
Detecta estructuras no empaquetadas que se utilizan en estructuras empaquetadas
Justificación: El compilador normalmente establece una estructura desempaquetada en una dirección que permite un acceso alineado a todos los elementos dentro de la estructura. Si crea esta estructura en una estructura empaquetada, el acceso alineado ya no será posible. Además, el acceso a un elemento de la estructura desempaquetada puede provocar una "excepción de desalineación".
Importancia: Alta
La estructura structSingleDataRecord
está empaquetado, pero contiene las estructuras desempaquetadas struct4Byte
y 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
Salida en el Mensajes vista:
SA0161: Declaración de una estructura desempaquetada 'struct9ByteData' dentro de una estructura empaquetada 'structSingleDataRecord'
SA0161: Declaración de una estructura desempaquetada 'struct4ByteData' dentro de una estructura empaquetada 'structSingleDataRecord'