реклама на сайте
подробности

 
 
> размер bitfields на I_A_R for ARM
bookevg
сообщение Jun 15 2007, 13:14
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 320
Регистрация: 13-09-06
Пользователь №: 20 348



Пример:
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.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 5)
KRS
сообщение Jun 15 2007, 13:26
Сообщение #2


Профессионал
*****

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Заменить 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;
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jun 15 2007, 15:07
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(bookevg @ Jun 15 2007, 16:14) *
Как сделать, чтобы в И_А_Р_е под BitReg выделялось два байта, а не 4.

Между прочим, IAR тут совершенно не причем. Все компиляторы по жизни обязаны трактовать unsigned,
как unsigned int.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
bookevg
сообщение Jun 16 2007, 07:38
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 320
Регистрация: 13-09-06
Пользователь №: 20 348



Вариант предложенный KRS не проходит на каждый элемент (M1..M16) выделяется по два байта.

В то время как описанный мною пример хорошо прокатывал на I_A_R для AVR
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jun 16 2007, 07:55
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



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

Нет.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
bookevg
сообщение Jun 16 2007, 08:13
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 320
Регистрация: 13-09-06
Пользователь №: 20 348



Только что сокмпилил проект с вариантом KRS: работает, до этого я только один элемент делал u16 - поэтому не проходило. Спасибо за консультацию
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 05:15
Рейтинг@Mail.ru


Страница сгенерированна за 0.0138 секунд с 7
ELECTRONIX ©2004-2016