Как проще прочитать один бит из регистра? (Си)
Добавлено: Ср сен 22, 2021 18:14:57
Можно вычислить сумму регистра, но это отнимает время. Как быстро и универсально прочитать один бит из регистра в среде программирования Си?
Здесь можно немножко помяукать :)
https://radiokot.ru:443/forum/
Код: Выделить всё
if(main_registr & (1<<2))
{ // бит = 1
x=1;
} else
{ // бит = 0
x=0;
}Код: Выделить всё
if(PORTB & (1<<2))
{ // бит = 1
x=1;
} else
{ // бит = 0
x=0;
}Код: Выделить всё
x = main_registr & (1<<2);
x = PORTB & (1<<2);Код: Выделить всё
union mmByte {
struct {
unsigned b0:1;
unsigned b1:1;
unsigned b2:1;
unsigned b3:1;
unsigned b4:1;
unsigned b5:1;
unsigned b6:1;
unsigned b7:1;
} mbyte;
volatile char m_byte;
}__attribute__((packed));
union mmByte mym_reg;
Код: Выделить всё
mym_reg.m_byte = 196;Код: Выделить всё
mym_reg.mbyte.b2 = 1;Код: Выделить всё
x = mym_reg.mbyte.b2;Код: Выделить всё
union mmByte * mym_reg2;
mym_reg2 = (void *)&PORTB;Код: Выделить всё
mym_reg2->m_byte = 196;Код: Выделить всё
mym_reg2->mbyte.b2 = 1;Код: Выделить всё
x = mym_reg2->m_byte;Код: Выделить всё
x = mym_reg2->mbyte.b2;Смотря какая конечная цель.Eddy_Em писал(а):Битовые поля - хуже,
а мне все равно во что он разворачивает, главное что бы разворачивал так, как мне нужно.Eddy_Em писал(а):т.к. не факт, что компилятор развернет поле в считывание и наложение маски