STM32 барьерные инструкции.

STM32 барьерные инструкции.

Если Вы не интересовались как работает МК, то скорее всего считаете, что он выполняет инструкции последовательно, одну за другой. Именно так и работали первые МК, но со временем их структура усложнялась для увеличения быстродействия.
Важно отметить, что выполнение самих инструкций, состоит из этапов. В общем виде с позиции МК это выглядит так, извлекаем инструкцию из памяти, выполняем ее, сохраняем результат.

Давайте рассмотрим какие улучшения в описанный выше механизм внесли инженеры RISC архитектуры, которая лежит в основе ARM. Если кто забыл аббревиатура ARM расшифровывается как Advanced RISC Machine, а дословно улучшенная RISC архитектура.
STM32 барьерные инструкции.
На картинке видно, что внутри МК разработчики реализовали конвейер, то есть за один такт все инструкции сдвигаются вправо. Пока новая инструкция загружается, инструкция, которая была загружена ранее декодируется и так далее. Сразу бы хотелось отметить, что конвейер всегда имеет ограниченную длину потому, что конвейер хорошо работает тогда, когда выполнение следующей инструкции не зависит от результата предыдущей, в противном случае возникает ступор конвейера.

ISB
Инструкция Instruction Synchronization Barrier (ISB) позволяет быть уверенным, что
эффект от выполнения всех завершённых обращений к памяти будет распространяться на
последующие инструкции.

Эта инструкция часто используется для того, чтобы конвейер завершил свою работу до выполнения следующей инструкции. То есть, что бы определенные настройки вступили в силу в определенный момент времени, например чтобы МК закончил свои дела перед тем как уснуть.
Еще один хороший пример использования инструкции ISB в программе, которая содержит самомодифицируемый код, Использование её сразу после модификации кода программы гарантирует, что далее будет выполняться уже модифицированный код.

DSB
Инструкция Data Synchronization Barrier (DSB) позволяет быть уверенным, что все
выполняемые обращения к памяти будут завершены до начала выполнения следующей
инструкции.

Простыми словами, DSB завершает свою работу после того, как будут выполнены все инициированные перед ней явные операции доступа к памяти.
Ее нужно использовать, когда приоритеты прерываний изменяются во время обработки прерывания. Это гарантирует, что изменение произойдет при завершении инструкции DSB. Другой интересный вопрос, который позволяет решать DSB связан с изменением контекста. а именно, чтобы изменение настроек МК давало эффект немедленно, вслед за изменением контекста.

DMB
Инструкция Data Memory Barrier (DMB) позволяет быть уверенным, что все выполняемые
обращения к памяти будут завершены до следующего обращения к памяти.

Простыми словами, DMB позволяет определить последовательность обращений к памяти, то есть обращения, стоящие до барьера, будут гарантированно выполнены перед теми, что стоят после.
Если программа изменяет таблицу векторов прерывания и затем разрешает прерывания, то перед разрешением необходимо поставить инструкция DMB. Это гарантирует, что в случае прерывания МК пойдет в таблицу прерываний по новому адресу.
комментарии
0