Является ли атомарным доступ к (загрузить / сохранить) 32-разрядному целому числу при использовании набора инструкций ARM Thumb?
Используя ARM Cortex с набором инструкций для большого пальца и компилятором реального просмотра Keil, безопасно ли получить доступ к 32-битному целому числу? Поскольку набор большого пальца состоит из 16 битов, означает ли это, что для извлечения 32-битного целого требуется 2 машинные инструкции? Если это так, доступ к 32-битному не будет атомарным. Если мое беспокойство верно, значит ли это, что присваивание int должно быть защищено критической областью?
2 ответа
Thumb использует те же 32-битные регистры, что и ARM, поэтому здесь нет проблем. Что вдвое меньше, так это размер инструкции (и даже это не совсем верно для Thumb-2).
Не беспокойтесь, вам не нужно менять код, если вы компилируете в Thumb.
Размер инструкции в режиме большого пальца составляет 16 бит, а не размер регистра.
Это означает, что постоянное назначение - как в i=1;
- можно рассматривать как атомный. Хотя генерируется более одной инструкции, только одна из них изменит расположение памяти i
даже если i
является int32_t
,
Но вам нужен критический раздел, когда вы к таким вещам, как i=i+1
, Это конечно не атомно.