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

 
 
> Битовые поля
Ivan_Kov
сообщение Feb 6 2007, 12:07
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 174
Регистрация: 30-10-06
Из: г. Курск
Пользователь №: 21 787



Рассматривая примеры программ в Embedded (для ARM) обратил внимание, что нигде не встречается работа с регистрами микроконтроллеров с использованием битовых полей. Интересно, почему так?
Помнится еще студентами ставили эксперимент, сравнивая скорость работы через битовые поля и использование масок со сдвигами. Пришли к выводу что битовые поля как-то побыстрее.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Ivan_Kov
сообщение Feb 6 2007, 12:27
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 174
Регистрация: 30-10-06
Из: г. Курск
Пользователь №: 21 787



что-то мне не верится что просто-так. хотя бы потому, что битовые поля - удобнее.
некоторое время назад писал софт для ЦОС, взаимодействующий с ПЛИС. и я софт разрабатывал и человек проект для ПЛИС тоже разрабатывал. естественно были всякие регистры с битовыми полями, формат которых менялся в процессе разработки. Если-бы я не использовал структуры с битовыми полями, то намного сложнее было бы адаптировать софт под новые версии проекта ПЛИС.

Цитата(Doka @ Feb 6 2007, 12:21) *
... А битовые поля каждый раз описывать надо....


Почему это каждый раз? один раз описал формат для конкретного регистра, и используй сколько хочешь.
А в случае с масками, это надо каждый раз при использовании учитывать расположение битов.
А если формат измениться, скажем поле шире станет, так это надо будет по всему проекту исправлять, запаришься.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Feb 6 2007, 12:57
Сообщение #3


Гуру
******

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



Цитата(Ivan_Kov @ Feb 6 2007, 11:27) *
что-то мне не верится что просто-так. хотя бы потому, что битовые поля - удобнее.

Ну а много-ли Вы в периферии контроллера найдете вообще битовых полей (не одиночных битов а групп )? А насколько удобнее одно другого при работе с одиночным битом? А вот насколько удобнее
и быстрее устанавливать за одно обращение несколько не сгруппированных битов в одном регистре а?
Цитата
нигде не встречается работа с регистрами микроконтроллеров с использованием битовых полей

Ну и "нигде не встречается" - да все IAR-овские хидеры так (и только так sad.gif ) написаны.
Приходится дублировать обычными описаниями битов.
Код
#ifdef __IAR_SYSTEMS_ICC__

#ifndef _SYSTEM_BUILD
  #pragma system_include
#endif

/* External interrupt register */
typedef struct{
__REG32 EINT0  : 1;
__REG32 EINT1  : 1;
__REG32 EINT2  : 1;
__REG32 EINT3  : 1;
__REG32        :28;
} __extint_bits;

/* External interrupt wakeup register */
typedef struct{
__REG32 EXTWAKE0  : 1;
__REG32 EXTWAKE1  : 1;
__REG32 EXTWAKE2  : 1;
__REG32 EXTWAKE3   : 1;
__REG32            :10;
__REG32 BODWAKE    : 1;
__REG32 RTCWAKE    : 1;
__REG32            :16;
} __extwake_bits;

..............


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Ivan_Kov
сообщение Feb 6 2007, 13:07
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 174
Регистрация: 30-10-06
Из: г. Курск
Пользователь №: 21 787



Цитата(zltigo @ Feb 6 2007, 12:57) *
Ну и "нигде не встречается" - да все IAR-овские хидеры так (и только так sad.gif ) написаны.
Приходится дублировать обычными описаниями битов.


с IAR не работал, не знал поэтому.
Ну а вобще я понял, что каждому инструменту - свое применение.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Feb 6 2007, 13:18
Сообщение #5


Гуру
******

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



Цитата(Ivan_Kov @ Feb 6 2007, 12:07) *
Ну а вобще я понял, что каждому инструменту - свое применение.

Естественно, но для периферии ARM контроллеров я явно предпочитаю банальное описание битов.
Код
// External interrupt mode register
#define EXTMODE_EXTMODE0    BIT0
#define EXTMODE_EXTMODE1    BIT1
#define EXTMODE_EXTMODE2    BIT2
#define EXTMODE_EXTMODE3    BIT3

Ну а структуры с битовыми полями это уже для, например, протокольных вещей
Код
// Internet Group Management Protocol Packet
typedef struct IGMP_packet {

        WORD   type    : 4;
        WORD   version : 4;
        BYTE   mbz;
        WORD   checksum;
        DWORD  address;
      } IGMP_packet;


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 19th July 2025 - 07:14
Рейтинг@Mail.ru


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