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”