Paketlenmiş yapılarda kullanılan paketlenmemiş yapıları tespit eder
Gerekçe: Derleyici tipik olarak paketlenmemiş bir yapıyı, yapı içindeki tüm elemanlara hizalanmış erişime izin veren bir adrese ayarlar. Bu yapıyı paketlenmiş bir yapıda oluşturursanız, hizalanmış erişim artık mümkün değildir. Ayrıca, paketlenmemiş yapıdaki bir öğeye erişim bir yanlış hizalama istisnasına yol açabilir.
Önemliymiş: Yüksek
Örnek
structSingleDataRecord yapısı paketlenmiştir, ancak paketlenmemiş struct4Byte ve struct9Byte yapılarını içerir.
{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
--> SA0161: Declaration of an unpacked struct 'struct9ByteData' inside a packed struct 'structSingleDataRecord'
--> SA0161: Declaration of an unpacked struct 'struct4ByteData' inside a packed struct 'structSingleDataRecord'
Ayrıca bakınız