[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: структуры в C/gcc



28 мая 2011 г. 20:34 пользователь  <yuri.nefedov@gmail.com> написал:
> 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/
>     (сам не проверял).
>  Ну и да, процессор- компайлер- зависимо.
>  Но тут видимо вообще никак.
>
>  Ю.

Reply to: