博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C语言中volatlie的用法
阅读量:2351 次
发布时间:2019-05-10

本文共 594 字,大约阅读时间需要 1 分钟。

      在编写嵌入式驱动的时候,经常要用到或看到volatile关键字,刚开始写驱动的时候,需要读取数据的时候,因为没有利用volatile关键字,导致没能正确的读取内容,后来查代码的时候才发现问题。

      volatile关键字的主要目的就是告知编译器,对于所定义的变量不需要优化,也就是当第一次用到这个变量的时候,编译器会将这个变量存储在一个寄存器中,当再次利用的时候,不会去RAM中取,而是直接从寄存器中拿,这样虽然速度快了,但是有可能在RAM中内容已经改变了,但是寄存器存的并没有改变,这样就会导致读到得数据并不是我们想要的。利用volatile关键字,就是要告知编译器,每次都要重新读取这个值,不要用寄存器中的值。

      网上这些解释都比较多,不过多数都是转来转去的,其中有一些还是不错的,下面得link是我觉得不错的。

 

     volatile主要应用在如下几种情况:

    1). 并行设备的硬件寄存器(如:状态寄存器)

    2). 一个中断服务子程序中会访问到的非自动变量(Non-automatic variables)
    3). 多线程应用中被几个任务共享的变量

在上面的链接中有提到 “一个参数既可以是const还可以是volatile吗?解释为什么。”其实我觉得const就是告诉程序员你所定义的这个东西,不要再重新赋值改变他原来的内容,而volatile是这片内存里内容可能会变化,因此两者可以一起用。

转载地址:http://ivrvb.baihongyu.com/

你可能感兴趣的文章
Java流(Stream)/文件(File)/IO
查看>>
文件处理(压缩与解压)
查看>>
Java中的目录
查看>>
JQuery实现对select选择框的赋值
查看>>
SweetAlert插件
查看>>
JSON学习
查看>>
有关项目的基础知识
查看>>
创建Java工程实现发送邮件(163邮箱)
查看>>
java.lang.NoClassDefFoundError: com/sun/mail/util/MailLogger javax/mail/MessagingException
查看>>
JavaScript学习
查看>>
JavaScript学习总结
查看>>
JQuery学习总结笔记1
查看>>
JQuery学习笔记2
查看>>
代码质量及其优化(学习笔记)
查看>>
将代码托管到GitHub
查看>>
Java实现PDF的生成(使用IText)
查看>>
MySQL学习笔记
查看>>
数据库连接池
查看>>
MySQL性能优化经验
查看>>
MySQL学习参考
查看>>