Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Есть ли экономия байтов
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
muravei
Экономит ли подобная запись что-нибудь :
Код
union TWI_statusReg // Status byte holding flags.
{
unsigned char all;
struct
{
unsigned char lastTransOK:1;
unsigned char unusedBits:7;
};
};


Могу ли я использовать остальные семь бит?
MrYuran
Цитата(muravei @ Jul 24 2009, 10:22) *
Экономит ли подобная запись что-нибудь :

По сравнению с чем?
Цитата
Могу ли я использовать остальные семь бит?

Да на здоровье
muravei
Цитата(MrYuran @ Jul 24 2009, 10:28) *
По сравнению с чем?

Да на здоровье

По сравнению с использованием unsigned char в качестве битовых целиком.
А как это выглядит в жизни? В смысле деятельности процессора?
Rst7
Цитата
А как это выглядит в жизни? В смысле деятельности процессора?


Смотря для какого. И где переменная, в регистре или в ОЗУ.
mempfis_
Цитата(muravei @ Jul 24 2009, 09:22) *
Могу ли я использовать остальные семь бит?


Используйте остальные 7 бит по своему усмотрению smile.gif
Можете расписать все биты до последнего smile.gif
Я подобными битовыми структурами управляю шаговыми двигателями.
Но они увеличивают размер программы. У меня структура из 3х битовых полей расположенных в одном байте увеличивает размер кода на ~100 байт (там правда используется поле в 2 бита для определения текущей фазы управления и поэтому подрастает код). Если же использовать однобитовые поля то думаю компилятор перегрузит переменную в регистр и будет использовать стандартные комманды проверки бита что не особо повлияет на производительность и размер кода smile.gif
Ещё недостаток битовых полей - на них нельзя определить указатель.
MrYuran
Цитата(mempfis_ @ Jul 24 2009, 10:52) *
Ещё недостаток битовых полей - на них нельзя определить указатель.

Ещё один мощный недостаток - компилятор расставляет биты по своему усмотрению, в то время как метод маскирования однозначно определяет каждую позицию.
Если ваша флаговая переменная только "для внутреннего потребления", это неважно.
А вот если выводится наружу и взаимодействует с другими системами (например, программой на ПК), возможны неприятности.
zltigo
Цитата(MrYuran @ Jul 24 2009, 10:05) *
Ещё один мощный недостаток - компилятор расставляет биты по своему усмотрению..]

Разумеется НЕТ.
sergeeff
Наверное, автор имел ввиду big-endian/little-endian упаковку битовых полей? Она действительно зависит от компилятора.
zltigo
Цитата(sergeeff @ Jul 24 2009, 13:59) *
Она действительно зависит от компилятора.

Вообще-то она зависит от платформы. Имеет место быть и при ручной паковке битов. По любому компилятор не занимается произвольной тасовкой.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.