| Форум РадиоКот https://radiokot.ru/forum/ |
|
| Как проще прочитать один бит из регистра? (Си) https://radiokot.ru/forum/viewtopic.php?f=57&t=178792 |
Страница 1 из 1 |
| Автор: | Kalisnik [ Ср сен 22, 2021 18:14:57 ] |
| Заголовок сообщения: | Как проще прочитать один бит из регистра? (Си) |
Можно вычислить сумму регистра, но это отнимает время. Как быстро и универсально прочитать один бит из регистра в среде программирования Си? |
|
| Автор: | parovoZZ [ Ср сен 22, 2021 20:25:07 ] |
| Заголовок сообщения: | Re: Как проще прочитать один бит из регистра? (Си) |
считываешь регистр и накладываешь битовую маску. |
|
| Автор: | Dimon456 [ Ср сен 22, 2021 21:31:27 ] |
| Заголовок сообщения: | Re: Как проще прочитать один бит из регистра? (Си) |
Смотря для чего читать бит. Самый простоя вариант накладываем маску СпойлерКод: 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=0 либо x=(1<<2)=4x = 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; x=0 либо x=1Ну а это из области фантастики, работа с регистром порта Код: 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; x=0 либо x=1 |
|
| Автор: | Eddy_Em [ Ср сен 22, 2021 21:51:59 ] |
| Заголовок сообщения: | Re: Как проще прочитать один бит из регистра? (Си) |
Битовые поля - хуже, т.к. не факт, что компилятор развернет поле в считывание и наложение маски. |
|
| Автор: | Dimon456 [ Ср сен 22, 2021 22:13:18 ] |
| Заголовок сообщения: | Re: Как проще прочитать один бит из регистра? (Си) |
Eddy_Em писал(а): Битовые поля - хуже, Смотря какая конечная цель.Eddy_Em писал(а): т.к. не факт, что компилятор развернет поле в считывание и наложение маски а мне все равно во что он разворачивает, главное что бы разворачивал так, как мне нужно.
|
|
| Автор: | Kalisnik [ Чт сен 23, 2021 13:30:38 ] |
| Заголовок сообщения: | Re: Как проще прочитать один бит из регистра? (Си) |
Dimon456, спасибо. |
|
| Автор: | ARV [ Чт сен 23, 2021 13:37:33 ] |
| Заголовок сообщения: | Re: Как проще прочитать один бит из регистра? (Си) |
в "среде" программирования на Си под названием avr-gcc, например, давно все встроено, есть набор макросов для чтения битов bit_is_set bit_is_clear ну а запись битов - это обычная операция И или ИЛИ |
|
| Автор: | Kalisnik [ Чт сен 23, 2021 18:31:53 ] |
| Заголовок сообщения: | Re: Как проще прочитать один бит из регистра? (Си) |
ARV, да, проще уже некуда. Спасибо. |
|
| Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|


