Безопасен ли доступ к 32-битному целому числу при использовании ARM Cortex с набором инструкций для большого пальца и компилятором Keil Realview? Поскольку набор регистров большого пальца составляет 16 бит, означает ли это, что для выборки 32-битного int требуются 2 машинные инструкции? Если это так, доступ к 32-битной версии не будет атомарным. Если мои опасения верны, означает ли это, что назначение int должно быть защищено критической областью?
Является ли атомарным доступ (загрузка / сохранение) 32-битного целого числа при использовании набора инструкций ARM Thumb?
Ответы (2)
Thumb использует те же 32-битные регистры, что и ARM, поэтому здесь нет никаких проблем. Что вдвое меньше, так это размер инструкции (и даже это не совсем верно для Thumb-2).
Не волнуйтесь, вам не нужно менять код, если вы компилируете в Thumb.
person
Igor Skochinsky
schedule
17.06.2011
Точно так же и для большого пальца, и для большого пальца2 вы сохраняете инструкции ldm / stm, до 8 регистров на инструкцию с большим пальцем и выглядят как полное дополнение к ARM для большого пальца 2. В принципе, если вас устраивает поведение ARM, не беспокойтесь о thumb / thumb2. Это декодер команд, а не выполнение.
- person old_timer; 17.06.2011
Однако инструкции LDM / STM не являются атомарными для всего набора до 8 регистров. Атомарность гарантируется только для 32-битного слова.
- person unixsmurf; 24.06.2011
В режиме большого пальца размер инструкции составляет 16 бит, а не размер регистра.
Это означает, что постоянное присвоение - как в i=1;
- можно рассматривать как атомарное. Несмотря на то, что генерируется более одной инструкции, только одна изменит расположение памяти i
, даже если i
равно int32_t
.
Но вам понадобится критический раздел, если вы перейдете к таким вещам, как i=i+1
. Это, конечно, не атомарно.
person
Turbo J
schedule
17.06.2011