Jas*_*ens 2 c microcontroller types volatile memory-address
我正在翻阅微控制器的一些C头文件,我一直看到寄存器地址初始化为vuint.我之前没有遇到过这种数据类型,所以我做了一些搜索,没有真正的结果.我得到的最接近的是/sf/answers/899919261/,它告诉我v代表"volatile".所以,我有挥发无符号的整数,持有硬件寄存器地址.就像在,我有一个数据类型明确指出"这个地址可能会发生变化",代表硬连线的寄存器,并且不能像以前那样改变.我对vuint的理解不正确吗?如果没有,为什么我们这样代表地址?
内存映射寄存器设置为volatile,因为它们中的值可能因外部原因(硬件中断等)而发生变化,编译器不知道.这意味着编译器应该避免某些优化并确保实际对地址进行读取(而不是针对缓存值进行优化等).
快速示例,包含一些标志的内存映射寄存器.
read flags
set bit in flags
interrupt sets another bit
<compiler optimizes and cached flags from before>
read flags <contains incorrect cached value>
Run Code Online (Sandbox Code Playgroud)