Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: размер bitfields на I_A_R for ARM
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
bookevg
Пример:
typedef struct
{
unsigned M1 : 1;
unsigned M2 : 1;
unsigned M3 : 1;
unsigned M4 : 1;
unsigned M5 : 1;
unsigned M6 : 1;
unsigned M7 : 1;
unsigned M8 : 1;
unsigned M9 : 1;
unsigned M10 : 1;
unsigned M11 : 1;
unsigned M12 : 1;
unsigned M13 : 1;
unsigned M14 : 1;
unsigned M15 : 1;
unsigned M16 : 1;
} T_BitFields;
typedef unsigned short u16;
typedef union
{
T_BitFields bR;
u16 R;
} T_BitReg;
T_BitReg BitReg;
Как сделать, чтобы в И_А_Р_е под BitReg выделялось два байта, а не 4.
KRS
Заменить unsigned на u16 в определение битовых полей!

typedef unsigned short u16;
typedef struct
{
u16 M1 : 1;
u16 M2 : 1;
u16 M3 : 1;
u16 M4 : 1;
u16 M5 : 1;
u16 M6 : 1;
u16 M7 : 1;
u16 M8 : 1;
u16 M9 : 1;
u16 M10 : 1;
u16 M11 : 1;
u16 M12 : 1;
u16 M13 : 1;
u16 M14 : 1;
u16 M15 : 1;
u16 M16 : 1;
} T_BitFields;
typedef union
{
T_BitFields bR;
u16 R;
} T_BitReg;
T_BitReg BitReg;
zltigo
Цитата(bookevg @ Jun 15 2007, 16:14) *
Как сделать, чтобы в И_А_Р_е под BitReg выделялось два байта, а не 4.

Между прочим, IAR тут совершенно не причем. Все компиляторы по жизни обязаны трактовать unsigned,
как unsigned int.
bookevg
Вариант предложенный KRS не проходит на каждый элемент (M1..M16) выделяется по два байта.

В то время как описанный мною пример хорошо прокатывал на I_A_R для AVR
zltigo
Цитата(bookevg @ Jun 16 2007, 10:38) *
...на каждый элемент (M1..M16) выделяется по два байта.

Нет.
bookevg
Только что сокмпилил проект с вариантом KRS: работает, до этого я только один элемент делал u16 - поэтому не проходило. Спасибо за консультацию
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.