14 Kasım 2018 Çarşamba

gcc extension - __attribute__ packed

Giriş
Açıklaması şöyle.
The packed attribute specifies that a variable or structure field should have the smallest possible alignment—one byte for a variable
Not : Bu kodlar portable değil. gcc aynı zamanda Microsoft kodlarını da okuyabiliyor. Portable kod için #pragma pack() şeklinde kullanırız.

Örnek - C++

Şöyle yaparız
struct __attribute__((__packed__)) BitsField 
{
  // Logic values
  uint8_t vesselPresenceSw: 1;
  uint8_t drawerPresenceSw: 1;
  uint8_t pumpState: 1;
  uint8_t waterValveState: 1;
  uint8_t steamValveState: 1;
  uint8_t motorDriverState: 1;
    // Unused
  uint8_t unused_0: 1;
  uint8_t unused_1: 1;
};
Örnek - C
Şöyle yaparız.
struct packet {
  uint16_t mfg;
  uint8_t type;
  uint16_t devid;
} __attribute__((packed));
Örnek - 1 Byte
Açıklaması şöyle
To pack a class is to place its members directly after each other in memory
Şöyle yaparız.
struct Sensor1Telemetry {
  int16_t temperature;
  uint32_t timestamp;
  uint16_t voltageMv;
    // etc...
} __attribute__((__packed__));



Hiç yorum yok:

Yorum Gönder