Я не знаю, можно ли использовать Cortex M4 в конфигурации с несколькими процессорами / многоядерными процессорами, но в целом:
- Барьеры памяти никогда не требуются (всегда могут быть опущены)в одноядерных системах.
- Барьеры памяти всегда необходимы (их нельзя опускать) в многоядерных системах, где потоки / процессы, работающие в одной и той же памяти, могут работать на разных ядрах.
Наличие или отсутствие переупорядочения операций записи в память на аппаратном уровне не имеет значения.
Конечно, я ожидаю, что инструкция DMB будет в основном бесплатной на чипах, которые не поддерживают SMP, поэтому я не уверенпочему вы хотите попытаться взломать его.
Обратите внимание, что, основываясь на вопросе, ссылающемся на код, который компилятор создает для атомарных встроенных функций, я предполагаю, что контекст предназначен для синхронизации атомарных элементов, чтобы сделать ихсоответствовать высокоуровневой спецификации, а не другим применениям, таким как барьеры ввода-вывода для MMIO, и вышеупомянутое «никогда» не должно рассматриваться как относящееся к этому (unrel) (хотя я подозреваю, что по причинам, которые вы уже указали, это не относится к Cortex M4).