-
- Когда таким манером работаешь с регистрами периферии, надо держать уши по ветру и нос на макушке. Иначе можно словить интересные эффекты вроде такого - il-2(1 знак., 22.07.2025 15:58, ссылка)
- "CTRL_PORT &= MASK; CTRL_PORT |=value;" - это два чтения и две
записи. Зато исходник нагляден, да. Но такая штука не всегда
допустима. SciFi(37 знак., 22.07.2025 15:15)
- Это да - в библиотеке STM макрос так и работает _ctac_(111 знак., 22.07.2025 19:49)
- +1. Регистры описаны как volatile, так чта компилятор эти две
операции в одну сам не склеит, надо руками. - LightElf(22.07.2025 15:55)
- А есть ли у ARM Cortex подходящие инструкции, чтобы сделать
модификацию? Вроде бы нет, раз уж они для сброса и установки бит
выходов GPIO сделали разные регистры. Nikolay_Po(104 знак., 22.07.2025 17:27)
- Нет таких инструкций. На то он и RISC, чтобы голый load-store. Для GPIO, как вы заметили, часто есть спецуевые регистры BSR/BRR/BSRR, чтобы одной записью установить-сбросить группу битов. Для остальных регистров надо извращаться тем или иным способом. Например: если часть битов фиксирована, а часть меняется - то можно просто писать новое значение. Типа такого: LightElf(157 знак., 22.07.2025 18:51)
- А есть ли у ARM Cortex подходящие инструкции, чтобы сделать
модификацию? Вроде бы нет, раз уж они для сброса и установки бит
выходов GPIO сделали разные регистры. Nikolay_Po(104 знак., 22.07.2025 17:27)