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

 
 
 
Reply to this topicStart new topic
> Битовое поле в WinAVR, AVR Studio, как его сделать? не получается что-то
smk
сообщение Nov 10 2012, 12:46
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Прошу подсказки в виде примера битового поля, что компилируется в WinAVR. Спасибо.


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
Snaky
сообщение Nov 10 2012, 12:53
Сообщение #2


Mute Beholder
***

Группа: Свой
Сообщений: 260
Регистрация: 4-04-07
Из: Третья планета от Солнца
Пользователь №: 26 754



Цитата(smk @ Nov 10 2012, 23:46) *
Прошу подсказки в виде примера битового поля, что компилируется в WinAVR.


Вот так работало в WinAVR
Код
volatile struct               //flags
{
   unsigned char Direction  : 1;
   unsigned char SensorFree : 1;
   unsigned char Tick       : 1;
   unsigned char DirChd     : 1;
} Flag;


--------------------
Common sense is not so common.
Go to the top of the page
 
+Quote Post
smk
сообщение Nov 10 2012, 14:26
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Кажись скушал.


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
Snaky
сообщение Nov 10 2012, 14:30
Сообщение #4


Mute Beholder
***

Группа: Свой
Сообщений: 260
Регистрация: 4-04-07
Из: Третья планета от Солнца
Пользователь №: 26 754



Цитата(smk @ Nov 11 2012, 01:26) *
Кажись скушал.

Ну так это вроде стандартный способ. Обращаться в коде так:
Код
Flag.Tick = TRUE;


Кстати, volatile опционально - это у меня просто флаги в прерывании менялись.


--------------------
Common sense is not so common.
Go to the top of the page
 
+Quote Post
smk
сообщение Nov 11 2012, 09:27
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Цитата(Snaky @ Nov 10 2012, 16:30) *
Ну так это вроде стандартный способ. Обращаться в коде так:
Код
Flag.Tick = TRUE;


Кстати, volatile опционально - это у меня просто флаги в прерывании менялись.

Спасибо, все работает. volatile оставил. И переменные глобальные так прописал. Иначе оптимизатор может неожиданно заоптимизировать что не нужно. Будет финальный вариант кода - тогда буду с ними разбираться.


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Nov 20 2012, 07:53
Сообщение #6


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(smk @ Nov 11 2012, 13:27) *
Иначе оптимизатор может неожиданно заоптимизировать что не нужно.
Прямо первобытный страх пробирает:-)


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Nov 20 2012, 09:45
Сообщение #7


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Я обычно иду немного дальше и определяю на всякий
Код
#define BITFIELD :1

struct               //flags
{
   unsigned char Direction  BITFIELD;
   unsigned char SensorFree BITFIELD;

    ...

} Flag;


"В случае чего", можно легким движением превратить битовые поля в байтовые


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
uni
сообщение Nov 24 2012, 05:00
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 31
Регистрация: 5-04-06
Из: Екатеринбург
Пользователь №: 15 809



Для полноты записи можно доопределять размер структуры, указывая даже размер пустого места:

Код
// Тип, описывающий глобальные флаги программы
typedef struct _SFLAGS {
    
    uint8_t KeyModePressed:  1; // Состояние клавиши MODE
    uint8_t KeyColorPressed: 1; // Состояние клавиши COLOR
    uint8_t GotoSleep:       1; // Команда "Заснуть" для основного потока (main)
    uint8_t RxComplete:      1; // Принята посылка в USART0
    uint8_t:                 4; // дополнение до 8 бит (резерв)
    
} SFLAGS;


--------------------
Россия навсегда!
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 18th June 2025 - 23:32
Рейтинг@Mail.ru


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