Является ли атомарным доступ (загрузка / сохранение) 32-битного целого числа при использовании набора инструкций ARM Thumb? - PullRequest
2 голосов
/ 17 июня 2011

Используя ARM cortex с набором инструкций для большого пальца и компилятор Keil realview, безопасно ли получить доступ к 32-битному целому числу?Поскольку набор большого пальца состоит из 16 битов, означает ли это, что для извлечения 32-битного целого требуется 2 машинные инструкции?Если это так, доступ к 32-битному не будет атомарным.Если мое беспокойство верно, значит ли это, что присваивание int должно быть защищено критической областью?

Ответы [ 2 ]

1 голос
/ 17 июня 2011

Thumb использует те же 32-битные регистры, что и ARM, поэтому здесь нет проблем.Что вдвое меньше, так это инструкция размера (и даже это не совсем верно для Thumb-2).

Не беспокойтесь, вам не нужно менять код, если вы компилируетена большой палец.

0 голосов
/ 17 июня 2011

Размер инструкции - 16-разрядный в режиме большого пальца, а не размер регистра.

Это означает, что постоянное присваивание - как в i=1; - может рассматриваться как атомарное. Хотя генерируется более одной инструкции, только одна из них изменит область памяти i, даже если i равно int32_t.

Но вам нужен критический раздел, как только вам понадобятся i=i+1. Это, конечно, не атомарно.

...