C语言volatile类型限定符

news/2024/10/30 9:31:31/

个人博客链接

volatile

在嵌入式系统中,部分内存空间可能是 易变的 (volatile),保存在这种内存空间中的值可能在程序运行期间发生改变,即使程序本身并没有修改这些值。比如说,外设的一些寄存器会映射到内存空间(即统一编址),而这些寄存器可能会被外设自己修改,比如说状态寄存器。

volatile 类型限定符可以告诉编译器,程序中的某些数据是 易变的volatile 通常用于指向易变内存空间的指针的声明中,比如说

volatile int *p;

使用 volatile 的一个作用在于,可以防止编译器对该变量的优化,从而避免程序出现问题。比如说有一个程序,最开始反复读取外设的状态寄存器,当状态寄存器的值表示外设已经完成对应操作后,程序就读取外设的数据寄存器。程序反复读取外设状态寄存器对应的地址,在编译器看来,程序并没有修改这个地址处的值,因此编译器可能会进行优化,即只在最开始读取一次,并把它放到寄存器中,后面对这个地址的读取都优化成对这个寄存器的读取,但是这样就会出现问题,如果最开始外设并没有完成相关操作,由于优化后的程序只在最开始读取了一次状态寄存器,即使后面状态寄存器的值更新了,CPU也并不会重新访问对应的内存地址,因此CPU就会一直认为外设没有完成相关操作,从而陷入死循环。使用 volatile 声明这个内存地址,编译器就不会进行这样的优化了。

新的问题

volatile可以防止编译器把反复load一个内存地址最终优化为只load一次,但是load指令硬件上也是先访问的cache,而不是实际外设中的寄存器,如果外设寄存器值发生改变,那么cache中的值还是旧的,那么CPU还是会读到一个旧值。外设寄存器的修改可能是外设自己执行的(比如状态寄存器),不走总线,cache也没法通过监听总线来保持一致性,那么这个问题是怎么解决的呢?难道是检测到内存地址是外设的时候,就不走cache了吗?

目前看到一个说法是 (14条消息) linux cache 一致性_dake_160413的博客-CSDN博客


http://www.ppmy.cn/news/513158.html

相关文章

android 权限管理适配 oppo,ColorOS 正式适配 Android 10,OPPO Reno 全网通用户已

2019 年 9 月 3 日,Android 10 正式版发布。近期在国内拥有极高市场占有率的 ColorOS 正式宣布开启 Android 10 万人公测尝鲜,并将率先在 OPPO Reno 全网通上推送基于 Android 10 开发的 ColorOS 。现在就让我们一起来看看基于 Android 10 开发的 ColorO…

渐变色【R Color】

文章目录 前言创建两个颜色之间的 Color Range例子:创建蓝色->红色之间的 Color Range 创建一组渐变的调色板使用画一下 “1 uM treatments”用自定义的渐变色再来一个拼图的 前言 不想干正事儿,搞搞 “ 颜色 ”😑 创建两个颜色之间的 C…

oppor17android版本,OPPOR17ColorOS系统怎么样

近两年来,的全面屏设计不是美人尖就是刘海屏,这两种设计虽然可以扩大屏占比,但是缺少设计的美感。 这时候,OPPO R17终于为我们带来了即有较高的屏占比又优雅的全面屏设计——水滴屏,让摄像头向水滴一样“垂涎欲滴”&am…

ArUco

文章目录 一、ArUco简介二、Marker和字典三、步骤1.创建Marker(Marker Creation)2.检测Marker(Marker Detection)3.姿态估计(Pose Estimation) 一、ArUco简介 姿态估计(Pose estimation&#xf…

VNC虚拟网络控制台(概述、windows系统连接linux系统演示)

第三阶段基础 时 间:2023年6月22日 参加人:全班人员 内 容: VNC虚拟网络控制台 目录 一、VNC概述 二、VNC基本上是由两部分组成 三、VNC特点 四、工作流程 五、安装 六、操作演示Windiws10系统远程控制linux 服务端:…

电弧点烟器点火器散件DIY电子打火机套件高压点火器单弧双弧充电

电弧点烟器点火器散件DIY电子打火机套件高压点火器单弧双弧充电 专业程序软件开发案!

真空热压烧结炉JZM-1200的结构构成

真空热压烧结炉是将真空、气氛、热压成型、高温烧结结合在一起设备,适用于粉末冶金、功能陶瓷等新材料的高温热成型。如应用于透明陶瓷、工业陶瓷等金属以及由难容金属组成的合金材料的真空烧结以及陶瓷材料碳化硅和氮化硅的高温烧结,也可用于粉末和压坯…

RUILON瑞隆源2R-8TH陶瓷气体放电管

2R-8TH是外形近似于传统插件的陶瓷气体放电管。通过zhuan利设计加以先进的焊接技术使得产品造型十分扁平;其浪涌额定值为10kA/20kA,8/20μs;由于其低关断状态电容与高带宽应用兼容,如果GDT上的电压发生变化,该电容负载值也不会变化。 优势&am…