-
- Не стоит забывать еще и об отсутствии культуры написания кода: я
неоднократно встречал записи вида Eddy_Em(1115 знак., 11.05.2023 17:18)
- Оно иногда бывает важно, чтобы именно так. Сначала один бит взводим, потом второй сбрасываем и только потом - взводим третий бит. Конкретно у STM такое не припоминаю, но вообще в однокристаллках - запросто встречается, типо первый бит включает периферийный модуль, второй - сбрасывает установленный флаг прерывания, третий - разрешает прерывания. При попытке сделать одной командой - можно неожиданно улететь в обработчик прерывания с неправильным контекстом. - LightElf(11.05.2023 20:10)
- Насчёт траты лишних тактов: а как ты сделаешь модификацию избранных
бит регистра, не меняя неизвестные остальные биты? Такое часто
встречается. Я оптимизирую так там, где можно записать регистр
целиком за раз, когда нет неизвестных бит, которые надо сохранить -
пишу сразу. Но в универсальном коде, каким является сабж, ты не
имеешь права менять других бит, так как не ты их устанавливал и
предысторией не владеешь. Поэтому и сброс/установка через
маскирование. - Nikolay_Po(11.05.2023 18:38)
- В большинстве случаев инициализации периферии вполне можно и даже желательно писать весь регистр, чтобы получить гарантированное состояние. Но в примерах и библиотеках очень часто по одной функции ставят и вместо одной прямой записи несколько модификаций. А предысторией не владеешь обычно во всяких регистрах включения тактирования, питания...., их не так много. - Andreas(11.05.2023 19:19)
- Для этого я просто считаю содержимое, применю битовую маску и верну взад. Eddy_Em(146 знак., 11.05.2023 18:52)
- Не стоит забывать еще и об отсутствии культуры написания кода: я
неоднократно встречал записи вида Eddy_Em(1115 знак., 11.05.2023 17:18)