我写入寄存器的代码是否需要更正?

时间:2013-03-23 04:23:29

标签: c embedded

我的问题是通用的,与任何特定的微控制器无关。 下面是写入硬件寄存器地址的代码。在这段代码中,我试图一个接一个地写几个值。

unsigned int *p;  //declare a pointer

p = (int *) 0x200;  //point to hardware register address

*p = 0x12;  // write to hardware register address

*p = 0xA5;  // write to hardware register address

*p = 0xff;  // write to hardware register address

以上是否需要更正?

1 个答案:

答案 0 :(得分:9)

如果您要写入硬件注册表,则通常需要使用volatile关键字:

volatile unsigned int *p;

如果没有volatile,优化编译器可能会认为前两次写入是不必要的(因为值会立即被覆盖)并将其优化掉。

Wikipedia article包含有关volatile的更多信息。