int* Register = 0x00FF0000; // Address of micro-seconds timer
while(*Register != 0);
在使用armcc编译器和-O0优化时,我应该将*Register
声明为volatile
吗?
换句话说:-O0优化是否要求将这类变量限定为volatile
? (这可能是-O2优化所必需的)
答案 0 :(得分:4)
在我看来,无论如何都要将Register
声明为volatile
,因为它是不稳定的。标记它volatile
没有坏处,因为你依赖编译器而不是通过指针优化访问。
int volatile* Register = (int*) 0x00FF0000;
您不应该依赖编译器优化设置来希望正确编译。我猜想忘记正确地标记volatile
是一个主要原因,即对嵌入式C代码进行优化往往会导致事情开始中断。