Является ли атомарным доступ к (загрузить / сохранить) 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, Это конечно не атомно.

Другие вопросы по тегам