如何使用关键字volatile读写内存映射寄存器?

时间:2014-01-24 22:40:46

标签: c memory mapping volatile

我在接受采访时遇到了这个问题。我没有这样的经历。

所以如果我们有两个寄存器。一个地址为0x11111111,另一个地址为0x22222222。我们想要读写它。第一个是32位寄存器,第二个是64位寄存器。我们怎么用C做呢?谁能给我一个例子?

谢谢,

1 个答案:

答案 0 :(得分:1)

您可以使用某种指针或其他指针,例如:

#include <stdint.h>

uint32_t volatile * p = (uint32_t volatile *) 0x11111111;
uint64_t volatile * q = (uint64_t volatile *) 0x22222222;

++*p;  // read-modify-write

(请注意,这个具体示例几乎肯定是假的,因为对于相应的类型,两个地址似乎都没有正确对齐。)

正如您所说,如果存储在这些地址的值可以从程序外部更改,则必须将指针限定为volatile;使用volatile,您告诉编译器不能对该值进行任何假设(例如,不能对volatile函数进行常量传播或公共子表达式消除)。

相关问题