dOb 10 November 7, 2025 Posted November 7, 2025 · Report post Да, для программиста - являются. А для работы с периферией? Ведь на самом деле происходит два обращения к регистру. Сначала считывается целиком, потом записывается с изменённым одним битом. Может ли за интервал между ими произойти коллизия? Quote Share this post Link to post Share on other sites More sharing options...
VladislavS 46 November 7, 2025 Posted November 7, 2025 · Report post 30 минут назад, dOb сказал: Ведь на самом деле происходит два обращения к регистру Это вы сами придумали? Quote Share this post Link to post Share on other sites More sharing options...
Arlleex 337 November 7, 2025 Posted November 7, 2025 · Report post 46 минут назад, VladislavS сказал: Это вы сами придумали? Ну, технически, как по-Вашему, выглядит доступ с точки зрения регистра? 1 час назад, dOb сказал: Может ли за интервал между ими произойти коллизия? На уровне шины это две отдельных операции чтения и записи. AMBA не умеет объединять транзакции в разные стороны в одну Burst (неразрывную), поэтому, гипотетически, любой другой мастер (например, DMA), вполне может нарушить атомарность доступов. Хм. А ведь возможно я и не прав. Это для APB нет стандартизированных сигналов блокировки шины. А вот для AHB такой сигнал вполне себе есть - HMASTLOCK. Поэтому, некоторую гарантию можно иметь для AHB-периферии. Но я не вижу причин полагаться на то, что доступ бит-бэндом к APB-периферии (включая способы доступа через шинные мосты AHB-APB) будет атомарным при конкурентном доступе разными шинными мастерами. Quote Share this post Link to post Share on other sites More sharing options...
VladislavS 46 November 7, 2025 Posted November 7, 2025 · Report post 43 минуты назад, Arlleex сказал: Ну, технически, как по-Вашему, выглядит доступ с точки зрения регистра? Выглядеть он может поразному. Никто не запрещает адресовать каждый бит отдельно и производить непосредственную запись в него. Ну разве что увеличение количества транзисторов... Заглянул в "ARM® Cortex®‑M4 Processor Technical Reference Manual" и моментом нашёл ответ на все вопросы. Действительно, осуществляется атомарное R-M-W. ТС мог бы это за 1 мин найти тоже. Quote Share this post Link to post Share on other sites More sharing options...
Arlleex 337 November 7, 2025 Posted November 7, 2025 · Report post 5 минут назад, VladislavS сказал: Выглядеть он может поразному. Никто не запрещает адресовать каждый бит отдельно и производить непосредственную запись в него. Ну разве что увеличение количества транзисторов... Ды нет. Процессор ведь вполне конкретный (хотя я предполагаю, т.к. раздел STM, а по большей части это либо Cortex-M3, либо M4), у него есть спецификация, в этой спецификации указаны в т.ч. версии и модели шинной архитектуры - и это AMBA 3. Поэтому никаких фокусов с битовыми адресациями в этих процессорах быть не может. В отличие от примитивных AVR, например, с инструкциями ядра, гарантирующими атомарность: sbi/cbi и т.д. Quote Share this post Link to post Share on other sites More sharing options...
jcxz 362 November 7, 2025 Posted November 7, 2025 · Report post 2 часа назад, dOb сказал: А для работы с периферией? Уточните: Атомарными с точки зрения кого? С точки зрения доступа от одного и того же ядра? С точки зрения доступа от разных ядер? С точки зрения доступа от разных bus-masters (DMA, etc.)? С точки зрения работы внутренней кухни самой целевой периферии? И о каком МК идёт речь? Quote Share this post Link to post Share on other sites More sharing options...
EdgeAligned 152 November 8, 2025 Posted November 8, 2025 · Report post ...ну и скажу, что в F0, F7, H7 от битбандинга отказались вовсе. Видимо, оное не шибко то нужно Quote Share this post Link to post Share on other sites More sharing options...
Arlleex 337 November 8, 2025 Posted November 8, 2025 · Report post Только что, EdgeAligned сказал: ...ну и скажу, что в F0, F7, H7 от битбандинга отказались вовсе. Видимо, оное не шибко то нужно Интересно тут другое: как часто кто-то этим вообще пользовался и какой в этом был прок. Лично мне ни разу не пригодилось. Quote Share this post Link to post Share on other sites More sharing options...
Obam 52 November 8, 2025 Posted November 8, 2025 · Report post ...ну и скажу, что в F0, F7, H7 от битбандинга отказались вовсе. Видимо, оное не шибко то нужно CM0+ - "недоразумение": "ни богу - свечка, ни чёрту - кочерёжка" - не показатель, IMHO. CM7 - "не царское дело" из ядра битодрыжствовать ;-) как часто кто-то этим вообще пользовался и какой в этом был прок. На CM3\CM4 - бывало, а прок? Feature есть, от использования хуже не становится - а вот могу! (((-8Ж Quote Share this post Link to post Share on other sites More sharing options...
EdgeAligned 152 November 9, 2025 Posted November 9, 2025 · Report post Пробовать - пробовал. Для установки/сброса битов SPE, CEN, DMA_EN и тп. Но чтобы вот пользоваться - ни разу. За одну операцию возможна манипуляция только с одним битом. Quote Share this post Link to post Share on other sites More sharing options...
Arlleex 337 November 9, 2025 Posted November 9, 2025 · Report post 3 часа назад, EdgeAligned сказал: Пробовать - пробовал. Для установки/сброса битов SPE, CEN, DMA_EN и тп. Ну так для этих битов битбэнд не нужен. Вообще чтение регистров не нужно. Quote Share this post Link to post Share on other sites More sharing options...
EdgeAligned 152 November 9, 2025 Posted November 9, 2025 · Report post Почему чтение регистров не нужно? Вкл/выкл без изменения остальных настроек в этом же регистре - вполне нормальная вещь. Особенно хорошо это видно в регистрах RCC. Теоретически битбандинг для этого там и нужен. Но на практике я не использовал - не стал заморачиваться. Quote Share this post Link to post Share on other sites More sharing options...
Arlleex 337 November 9, 2025 Posted November 9, 2025 · Report post 17 минут назад, EdgeAligned сказал: Почему чтение регистров не нужно? Вкл/выкл без изменения остальных настроек в этом же регистре - вполне нормальная вещь. Особенно хорошо это видно в регистрах RCC. Теоретически битбандинг для этого там и нужен. Но на практике я не использовал - не стал заморачиваться. RCC ресурс разделяемый. А в SPI/DMA и т.д. почти всегда одной записью можно обойтись. Quote Share this post Link to post Share on other sites More sharing options...
EdgeAligned 152 November 9, 2025 Posted November 9, 2025 · Report post Не в том дело. Например, приостановка таймера: void Disable() { ... &= ~TIM_CR1_CEN; }, возобновление счета: void Enable() { ... |= TIM_CR1_CEN}. В противном случае придется указывать все остальные используемые биты этого регистра. С SPI дело еще хуже - там настроек в одном регистре куда больше, и когда таскаешь их все по тексту, легко ошибиться. А выключать SPI может понадобиться для экономии тока потребления. Бывают же устройства и на батарейном питании тоже. Quote Share this post Link to post Share on other sites More sharing options...
Arlleex 337 November 9, 2025 Posted November 9, 2025 · Report post Так таскаемые биты проще обозвать константой и записывать TIM->CR1 = TIM_CR1 | TIM_CR1_CEN. 7 минут назад, EdgeAligned сказал: С SPI дело еще хуже - там настроек в одном регистре куда больше, и когда таскаешь их все по тексту, легко ошибиться. А выключать SPI может понадобиться для экономии тока потребления. SPI->CR1 = 0x0; Вот и все выключение на уровне модуля SPI. Quote Share this post Link to post Share on other sites More sharing options...