Skip to main content

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

ejemplo 119. Ejemplo

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:

  • sa_icon_message.png SA0161: Declaración de una estructura desempaquetada 'struct9ByteData' dentro de una estructura empaquetada 'structSingleDataRecord'

  • sa_icon_message.png SA0161: Declaración de una estructura desempaquetada 'struct4ByteData' dentro de una estructura empaquetada 'structSingleDataRecord'