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

0 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
Run Code Online (Sandbox Code Playgroud)

以上是否需要更正?

Mar*_*n B 9

如果您要写入硬件寄存器,通常需要使用以下volatile关键字:

volatile unsigned int *p;
Run Code Online (Sandbox Code Playgroud)

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

这篇维基百科文章提供了更多信息volatile.