C语言中volatlie的用法

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

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

      网上这些解释都比较多,不过多数都是转来转去的,其中有一些还是不错的,下面得link是我觉得不错的。http://blog.21ic.com/user1/2949/archives/2007/35599.html

 

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

    1). 并行设备的硬件寄存器(如:状态寄存器)
    2). 一个中断服务子程序中会访问到的非自动变量(Non-automatic variables)
    3). 多线程应用中被几个任务共享的变量

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值