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

标签 c memory mapping volatile

我在面试中遇到了这个问题。我没有这样的经验。

所以如果我们有两个寄存器。一个地址为 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/

相关文章:

ruby - 从带有命名空间节点的 ruby​​ 类生成 xml

C++ 线程构造函数,使用 new(object) 会造成内存泄漏

c - 分解具有特定结构的原始字节字符串会给出错误的数据

c++ - 用一维序列覆盖二维空间

c - 没有连续 2 个 a 和 b 的正则表达式

c# - WPF 列表框项目消耗太多内存

python - 将部分案例匹配到 Python 字典

c - 使用宏时出现错误 : invalid operands to binary + (have 'char *' and 'char *' ) ,

c - 如何删除对象/结构?

c - 检测到堆栈粉碎 : running program with dinamically allocated array of structures