Skip to main content

SA0161:パック構造のアンパック構造

パック構造で使用されるアンパック構造を決定します。

理由: コンパイラは通常、アンパックされた構造体を、構造体内のすべての要素への整列されたアクセスを許可するアドレスに設定します。この構造をパック構造で作成すると、整列アクセスは不可能になります。さらに、アンパックされた構造内の要素にアクセスすると、「不整列例外」が発生する可能性があります。

重要性:高い

119.

構造 structSingleDataRecord パックされていますが、アンパックされた構造が含まれています struct4Bytestruct9Byte

{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

での出力 メッセージ ビュー:

  • sa_icon_message.png SA0161: パックされた構造体 'structSingleDataRecord' 内のアンパックされた構造体 'struct9ByteData' の宣言

  • sa_icon_message.png SA0161: パックされた構造体 'structSingleDataRecord' 内のアンパックされた構造体 'struct4ByteData' の宣言