Volatile关键字的作用

本文详细介绍了C/C++中volatile关键字的作用及其应用场景,包括中断服务程序、多任务环境及硬件寄存器等。同时探讨了volatile变量的行为特征以及合理使用的注意事项。

定义:词义,易变的, 实质是直接存取原始内存地址

(1)作用

  volatile关键词影响编译器编译的结果,用 volatile声明的变量表示该变量随时可能发生变化,与该变量有关的运算,不要进行编译优化,以免出错

  1.告诉编译器不要做任何优化

  2.用volatile定义的变量会在程序外被改变,每次都必须从原始内存中读取,而不能重复使用放在cache或寄存器中的备份

(2)为什么会可能内改变?

  变量可能被当前代码之外的因素而改变:

  1.中断服务程序中修改的供其它程序检测的变量需要加volatile:中断处理程序isr中更改了这个变量的值

  2.多任务环境下各任务间共享的标志应该加volatile:多线程中在别的线程更改了这个变量的值

  3.存储器映射的硬件寄存器通常也要加voliate:硬件自动更改了这个变量的值(一般这个变量是一个寄存器的值)

(3)几个问题

  1.一个参数既可以是const还可以是volatile吗?

    可以的,例如只读的状态寄存器。它是volatile因为它可能被意想不到地改变。它是const因为程序不应该试图去修改它

  2.一个指针可以是volatile 吗?

    可以,当一个中断服务子程序修改一个指向一个buffer的指针时

注意:频繁地使用volatile很可能会增加代码尺寸和降低性能,因此要合理的使用volatile

 

参考 http://blog.youkuaiyun.com/dev_linux/article/details/44829549

转载于:https://www.cnblogs.com/Deanboy/p/7525476.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值