2011-06-17 9 views
2

親指命令セットとKeil実数コンパイラを使用してARMコアを使用すると、32ビット整数に安全にアクセスできますか?サムレジスタセットは16ビットなので、32ビットintをフェッチするには2つのマシン命令が必要です。その場合、32ビットにアクセスすることはアトミックではありません。私の心配が真実なら、int代入はクリティカルな地域によって保護されるべきですか?ARM Thumb命令セットを使用する場合、32ビット整数にアクセス(ロード/ストア)するのはアトミックですか?

答えて

1

ThumbはARMと同じ32ビットレジスタを使用しているため、問題はありません。半分になっているのは、の指示のサイズです(Thumb-2の場合でも厳密にはそうではありません)。

Thumbにコンパイルする場合は、コードを変更する必要はありません。

+0

同様に、thumbとthumb2の両方の場合、ldm/stm命令を保持します。命令ごとに最大8つのレジスタがサムであり、サムのARMとして完全補数になります。基本的にARMの動作に満足していたら、thumb/thumb2について心配しないでください。実行命令ではなく命令デコーダのことです。 –

+0

しかし、LDM/STM命令は、最大8個のレジスタのセット全体に対してアトミックではありません。アトミシティは、32ビットワードごとに保証されています。 – unixsmurf

0

命令サイズは、サムサイズでは16ビットであり、レジスタサイズではありません。

これは、i=1;のような定数割り当てがアトミックであるとみなされることを意味します。複数の命令が生成されますが、iint32_tであっても、iのメモリ位置が1つだけ変更されます。

しかし、あなたは一度i=i+1のようなものにクリティカルセクションが必要です。それはもちろん原子ではありません。

関連する問題