Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Битовое поле в WinAVR, AVR Studio
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
smk
Прошу подсказки в виде примера битового поля, что компилируется в WinAVR. Спасибо.
Snaky
Цитата(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;
smk
Кажись скушал.
Snaky
Цитата(smk @ Nov 11 2012, 01:26) *
Кажись скушал.

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


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


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

Спасибо, все работает. volatile оставил. И переменные глобальные так прописал. Иначе оптимизатор может неожиданно заоптимизировать что не нужно. Будет финальный вариант кода - тогда буду с ними разбираться.
demiurg_spb
Цитата(smk @ Nov 11 2012, 13:27) *
Иначе оптимизатор может неожиданно заоптимизировать что не нужно.
Прямо первобытный страх пробирает:-)
MrYuran
Я обычно иду немного дальше и определяю на всякий
Код
#define BITFIELD :1

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

    ...

} Flag;


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

Код
// Тип, описывающий глобальные флаги программы
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;
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.