我的问题是通用的,与任何特定的微控制器无关.下面是写入硬件寄存器地址的代码.在这段代码中,我试图一个接一个地写几个值.
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
Run Code Online (Sandbox Code Playgroud)
以上是否需要更正?
如果您要写入硬件寄存器,通常需要使用以下volatile关键字:
volatile unsigned int *p;
Run Code Online (Sandbox Code Playgroud)
如果没有volatile,优化编译器可能会断定前两次写入是不必要的(因为值会立即被覆盖)并将其优化掉.
这篇维基百科文章提供了更多信息volatile.