On Sat, 28 May 2011, Dmitry E. Oboukhov wrote:


мы микроконтроллеры программируем. поскольку там на борту всего 0.5-1К
RAM то эта RAM экономится жестко. соответственно всякие поля зачастую
упаковываются в байты:

struct something {
   uint8_t type;
   union {
        struct {
           unsigned flag1:1;
           unsigned field1:5;
           unsigned field2:2;
       };

       struct {
           unsigned bla:2;
           int      ble:3;
           int      bee:3;
       };
   };
}

в зависимости от типа type либо одна часть либо другая часть union
актуальна. ну и можно сюда добавить uint8_t data и проинициализировать
union скажем числом 0x23, но это будет довольно
* нечитабельно
* болезненно переживать смену порядка/набора полей в union
--

  Немного не в тему. Так, информация для размышления.
  Недавно для себя выяснил, что битовые поля могут подложить каку:
  1) Медленно работают. Переход на маски дал увеличение
     скорости в два раза.
  2) С некоторыми типами памяти gcc может дать
     неправильно работающий код:
     http://www.coranac.com/documents/working-with-bits-and-bitfields/
     (сам не проверял).
  Ну и да, процессор- компайлер- зависимо.
  Но тут видимо вообще никак.

 Ю.

Ответить