我的问题是通用的,与任何特定的微控制器无关。 下面是写入硬件寄存器地址的代码。在这段代码中,我试图一个接一个地写几个值。
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
以上是否需要更正?
答案 0 :(得分:9)
如果您要写入硬件注册表,则通常需要使用volatile
关键字:
volatile unsigned int *p;
如果没有volatile
,优化编译器可能会认为前两次写入是不必要的(因为值会立即被覆盖)并将其优化掉。
此Wikipedia article包含有关volatile
的更多信息。