繁体   English   中英

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

[英]How to read and write memory mapped registers using keyword 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值,可能无法进行常数传播或公共子表达式消除)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM