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: