armcc是否使用-O0优化非易失性变量?

时间:2010-04-08 22:19:30

标签: c volatile

int* Register = 0x00FF0000; // Address of micro-seconds timer
while(*Register != 0);

在使用armcc编译器和-O0优化时,我应该将*Register声明为volatile吗?

换句话说:-O0优化是否要求将这类变量限定为volatile? (这可能是-O2优化所必需的)

1 个答案:

答案 0 :(得分:4)

在我看来,无论如何都要将Register声明为volatile,因为它是不稳定的。标记它volatile没有坏处,因为你依赖编译器而不是通过指针优化访问。

int volatile* Register = (int*) 0x00FF0000;

您不应该依赖编译器优化设置来希望正确编译。我猜想忘记正确地标记volatile是一个主要原因,即对嵌入式C代码进行优化往往会导致事情开始中断。