int* Register = 0x00FF0000; // Address of micro-seconds timer
while(*Register != 0);我应该在使用armcc编译器和-O0优化时将*Register声明为volatile吗?
换句话说:-O0优化是否需要将这类变量限定为volatile?(这可能是-O2优化所必需的)
发布于 2010-04-09 06:23:59
在我看来,您应该不管怎样将Register声明为volatile,因为它是易失性的。将其标记为volatile没有什么坏处,因为您依赖于编译器不会优化通过指针进行的访问。
int volatile* Register = (int*) 0x00FF0000;您不应该依赖于编译器优化设置来希望它被正确编译。我猜想,忘记适当地标记volatile是在嵌入式C代码上启动优化经常导致事情开始崩溃的一个主要原因。
https://stackoverflow.com/questions/2603833
复制相似问题