SA0161:パック構造のアンパック構造
パック構造で使用されるアンパック構造を決定します。
理由: コンパイラは通常、アンパックされた構造体を、構造体内のすべての要素への整列されたアクセスを許可するアドレスに設定します。この構造をパック構造で作成すると、整列アクセスは不可能になります。さらに、アンパックされた構造内の要素にアクセスすると、「不整列例外」が発生する可能性があります。
重要性:高い
例 119. 例
構造 structSingleDataRecord パックされていますが、アンパックされた構造が含まれています struct4Byte と 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_TYPETYPE struct4Byte :
STRUCT
//udiDummy : UDINT;
rRealDummy : REAL;
END_STRUCT
END_TYPEでの出力 メッセージ ビュー:
SA0161: パックされた構造体 'structSingleDataRecord' 内のアンパックされた構造体 'struct9ByteData' の宣言
SA0161: パックされた構造体 'structSingleDataRecord' 内のアンパックされた構造体 'struct4ByteData' の宣言