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

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


person Zhichao    schedule 17.06.2011    source источник


Ответы (2)


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

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

person Igor Skochinsky    schedule 17.06.2011
comment
Точно так же и для большого пальца, и для большого пальца2 вы сохраняете инструкции ldm / stm, до 8 регистров на инструкцию с большим пальцем и выглядят как полное дополнение к ARM для большого пальца 2. В принципе, если вас устраивает поведение ARM, не беспокойтесь о thumb / thumb2. Это декодер команд, а не выполнение. - person old_timer; 17.06.2011
comment
Однако инструкции 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