2010-04-08 71 views
2
int* Register = 0x00FF0000; // Address of micro-seconds timer 
while(*Register != 0); 

在使用armcc编译器和-O0优化时,我应该声明*Registervolatile吗?armcc是否使用-O0优化非易失性变量?

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

回答

4

在我看来,你应该声明Registervolatile不管,因为它是易变的。在标记volatile时没有什么坏处,因为你依赖于编译器而不是通过指针优化访问。

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

您不应该依赖编译器优化设置来希望编译正确。我猜想,忘记标记volatile适当的东西是启动嵌入式C代码优化常常导致事情开始突破的主要原因。

+0

事实上,你可能是对的。但作为新手的一部分,我没有注意到“volatile”问题而犯了一个错误。现在,我必须再次阅读我的代码,这是很多。我的项目测试截止日期很近,所以我没有时间。所以我剩下的就是希望-O0能够救我...... – Dor 2010-04-08 22:29:08

+0

@Dor:我想你并不孤单(就像我在最后一句话中所暗示的那样)。所以'-O0'可能会帮助你解救,但你应该真的试着把这些东西弄清楚。如果不是现在,那么按照时间表安排截止日期。 – 2010-04-08 22:34:28

+0

好的,谢谢:) – Dor 2010-04-08 22:43:06