使用带有拇指指令集和Keil realview编译器的ARM cortex,访问32位整数是否安全?由于拇指寄存器组是16位,这是否意味着,获取32位int需要2个机器指令?如果是这样,访问32位将不是原子的。如果我的担心是真的,那是否意味着int赋值应该受到关键区域的保护?
答案 0 :(得分:1)
Thumb使用与ARM相同的32位寄存器,因此没有问题。减少的是指令大小(即使对于Thumb-2来说也不严格如此)。
不用担心,如果您正在编译Thumb,则无需更改代码。
答案 1 :(得分:0)
指令大小在拇指模式下是16位,而不是寄存器大小。
这意味着常量赋值 - 如i=1;
- 可被视为原子。尽管生成了多条指令,但即使i
为i
,也只有一条指令会修改int32_t
的内存位置。
但是,对于像i=i+1
这样的事情,你需要一个关键部分。那当然不是原子的。