我在接受采访时遇到了这个问题。我没有这样的经历。
所以如果我们有两个寄存器。一个地址为0x11111111,另一个地址为0x22222222。我们想要读写它。第一个是32位寄存器,第二个是64位寄存器。我们怎么用C做呢?谁能给我一个例子?
谢谢,
答案 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函数进行常量传播或公共子表达式消除)。