Перейти к содержанию
    

Вопрос по побитовым операциям

Здравствуйте.

В языке Си, чтобы выставить или обнулить отдельный бит в регистре, нужно использовать команды сдвига и логические операции. Например был регистр 01010001, а стал 01010101. Но тогда же остальные биты в байте тоже же перезапишутся, просто с предыдущими значениями. А можно ли выставить (или обнулить) только один бит в регистре, не трогая остальные биты? На языке Си.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

21 минуту назад, Damyen сказал:

В языке Си, чтобы выставить или обнулить отдельный бит в регистре

В языке си нету регистров.

21 минуту назад, Damyen сказал:

А можно ли выставить (или обнулить) только один бит в регистре, не трогая остальные биты? На языке Си.

Регистры есть в микроконтроллерах. А можно или нет производить операции с отдельными битами каждого конкретного периферийного регистра - читайте в мануале на ваш микроконтроллер. Некоторые периферийные регистры это позволяют. Но для этого нужно сперва открыть и прочитать мануал на эту периферию.

Также средства для атомарных манипуляций с битами есть в некоторых архитектурах. В ARM например - (bit-banding). На уровне ядра (CPU).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да я понимаю, что регистры есть в МК. И также знаю, что это можно сделать на ассемблере. Но вот для операций с отдельными битами на Си, прочитал, что можно использовать команду PORTB = PORTB | (1 << 5), чтобы выставить 5 бит. Но если внимательно на нее посмотреть, то мы все равно взаимодействуем со всем регистром МК, а не с одним битом.

Изменено пользователем Damyen

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В Си нет таких средств, так что только через вставку ассемблерных команд SBI, CBI.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как раз то "PORTB = PORTB | (1 << 5)" после компиляции "превратится" в одну SBI. Другое дело, что в AVR битовые операции взаимодействуют со всем байтом данных, т.е. производится операция  "чтение-модификация-запись".
И пофиг тут, Си или ассемблер.)

Изменено пользователем v05

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...