Size: a a a

2020 June 11

u

uis in Embedded Group
uis
struct st{
bool b:1;
};
Тип такое?
источник

СС

Сиие Сууие in Embedded Group
Сергей Колотовченко
Голые битовые числа зло. Сам через полгода-год забудешь что к чему, поддерживать нереально. Лучше вместо битовых сдвигов делать структуру с битовыми полями
Не работает когда состояние кодится более чем одним битом
источник

СС

Сиие Сууие in Embedded Group
uis
Тип такое?
Оно вроде не совсем так пишется но тип того
источник

СК

Сергей Колотовченко... in Embedded Group
Типа struct State { uint8_t normalWork : 1; uint8_t sendAnswer : 1; uint8_t other : 3;};
источник

СК

Сергей Колотовченко... in Embedded Group
Использовать так: State state = { .normalWork = true; .other = 5};
источник

u

uis in Embedded Group
Сергей Колотовченко
Типа struct State { uint8_t normalWork : 1; uint8_t sendAnswer : 1; uint8_t other : 3;};
Сразу говорю минусы:
1) Implementation-dependent
2) В большинстве реализаций биты выделяются со старшего
источник

u

uis in Embedded Group
uis
Сразу говорю минусы:
1) Implementation-dependent
2) В большинстве реализаций биты выделяются со старшего
Самый главный минус - первый
источник

D

Dr Zlo in Embedded Group
hardegor
#define NORMAL_WORK  1<<5
#define SEND_ANSWER    1<<2
а постоянную команду:
#define DEFAULT_STATE  NORMAL_WORK|SEND_ANSWER
и тогда можно так:
state |= NORMAL_WORK|SEND_ANSWER
или так:
state |= DEFAULT_STATE
Это херня.
источник

u

uis in Embedded Group
hardegor
#define NORMAL_WORK  1<<5
#define SEND_ANSWER    1<<2
а постоянную команду:
#define DEFAULT_STATE  NORMAL_WORK|SEND_ANSWER
и тогда можно так:
state |= NORMAL_WORK|SEND_ANSWER
или так:
state |= DEFAULT_STATE
Прям cmsis
источник

u

uis in Embedded Group
Dr Zlo
Это херня.
Почему?
источник

D

Dr Zlo in Embedded Group
Например:
#define NORMAL_WORK  1<<5
#define OTHER_WORK  0<<5
источник

D

Dr Zlo in Embedded Group
Когда от одного бита зависят два разных варианта работы, 0 или 1 в конкретной позиции
источник

D

Dr Zlo in Embedded Group
Например из подручного:

//RGB or BGR order
#define MADCTL_RGB (0 << 3)
#define MADCTL_BGR (1 << 3)
источник

СК

Сергей Колотовченко... in Embedded Group
uis
Сразу говорю минусы:
1) Implementation-dependent
2) В большинстве реализаций биты выделяются со старшего
Если брать кортексы и современные компиляторы то всё совпадает. Покрыть тестами и норм. Проверено на IAR, GCC, clang, msvc
источник

СК

Сергей Колотовченко... in Embedded Group
Зато читаемость на высоте и нет проблем с многобитовыми полями
источник

СК

Сергей Колотовченко... in Embedded Group
Биты с младшего
источник

D

Dr Zlo in Embedded Group
Dr Zlo
Например из подручного:

//RGB or BGR order
#define MADCTL_RGB (0 << 3)
#define MADCTL_BGR (1 << 3)
Никто не мешает задуматься и написать MADCTL_RGB | MADCTL_BGR. Так же проблема с присвоением одного конкретного бита.
источник

СС

Сиие Сууие in Embedded Group
Dr Zlo
Например из подручного:

//RGB or BGR order
#define MADCTL_RGB (0 << 3)
#define MADCTL_BGR (1 << 3)
Ну да верно писать
#defene DA 1
#define NYET 0
#define WORK_POS
state |= DA<<WORK_POS
источник

СК

Сергей Колотовченко... in Embedded Group
Из минусов битовых сдвигов и девайнов - нет строгой типизации, можно любой другой дефайн присвоить
источник

h

hardegor in Embedded Group
Dr Zlo
Никто не мешает задуматься и написать MADCTL_RGB | MADCTL_BGR. Так же проблема с присвоением одного конкретного бита.
Ну так на всём можно задуматься и неправильно написать.
источник