Как проще прочитать один бит из регистра? (Си)
- Сообщения: 430
- Зарегистрирован: Вс апр 18, 2021 15:43:55
Можно вычислить сумму регистра, но это отнимает время. Как быстро и универсально прочитать один бит из регистра в среде программирования Си?
- Реклама
- Сообщения: 1759
- Зарегистрирован: Пт июн 01, 2018 07:28:45
- Сообщения: 1849
- Зарегистрирован: Вс дек 25, 2016 08:34:54
Смотря для чего читать бит.
Самый простоя вариант накладываем маскуто же самое и с портомно при попытке прочитатьx=0 либо x=(1<<2)=4но, существует и другой способзапись в переменную напрямую числом либо напрямую в битсоответственно прочитать бит можно такx=0 либо x=1
Ну а это из области фантастики, работа с регистром портазапись число в портотдельно биттеперь чтение:
полностью портотдельно битx=0 либо x=1Достаточно исчерпывающий ответ?
Самый простоя вариант накладываем маску
Спойлер
Код: Выделить всё
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Код: Выделить всё
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;- Сообщения: 2516
- Зарегистрирован: Пт июл 12, 2019 22:52:01
Битовые поля - хуже, т.к. не факт, что компилятор развернет поле в считывание и наложение маски.
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Я на гитхабе, в ЖЖ
- Сообщения: 1849
- Зарегистрирован: Вс дек 25, 2016 08:34:54
Смотря какая конечная цель.Eddy_Em писал(а):Битовые поля - хуже,
а мне все равно во что он разворачивает, главное что бы разворачивал так, как мне нужно.Eddy_Em писал(а):т.к. не факт, что компилятор развернет поле в считывание и наложение маски
- Реклама
- Сообщения: 430
- Зарегистрирован: Вс апр 18, 2021 15:43:55
в "среде" программирования на Си под названием avr-gcc, например, давно все встроено, есть набор макросов для чтения битов
bit_is_set
bit_is_clear
ну а запись битов - это обычная операция И или ИЛИ
bit_is_set
bit_is_clear
ну а запись битов - это обычная операция И или ИЛИ
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Сообщения: 430
- Зарегистрирован: Вс апр 18, 2021 15:43:55


