2

使用带有拇指指令集和 Keil realview 编译器的 ARM cortex,访问 32 位整数是否安全?由于拇指寄存器集是 16 位,这是否意味着获取 32 位 int 需要 2 条机器指令?如果是这样,访问 32 位将不是原子的。如果我的担心是真的,这是否意味着 int 分配应该受到关键区域的保护?

4

2 回答 2

1

Thumb 使用与 ARM 相同的 32 位寄存器,因此没有问题。减半的是指令大小(即使对于 Thumb-2 来说严格来说也不是这样)。

不用担心,如果您正在编译为 Thumb,则无需更改代码。

于 2011-06-17T16:23:50.540 回答
0

拇指模式下的指令大小是 16 位,而不是寄存器大小。

这意味着常量赋值 - 如 in i=1;- 可以被视为原子的。虽然生成了不止一条指令,但只有一条会修改iif iis的内存位置int32_t

但是你需要一个关键部分,一旦你对之类的东西i=i+1。这当然不是原子的。

于 2011-06-17T17:12:40.740 回答