我在面试中遇到了这个问题。我没有这样的经验。
所以如果我们有两个寄存器。一个地址为 0x11111111,另一个地址为 0x22222222。我们想读和写它。第一个是 32 位寄存器,而第二个是 64 位寄存器。我们如何在 C 中做到这一点?谁能给我举个例子吗?
谢谢,
最佳答案
您可以使用某种指针或其他类型,例如:
#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 值进行常量传播或公共(public)子表达式消除)。
关于c - 如何使用关键字 volatile 读写内存映射寄存器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21343796/