volatile关键字的用法

浏览:602来源:本站时间:2021-01-28

介绍

Volatile是一个C语言的关键字,用于修饰变量。被该关键词修饰的变量,表明该变量可能会因一些编译器控制外的因素改变。且编译器必须假设对于该类型变量的任何访问都会产生影响,故对于Volatile变量的所有访问操作都必须保留。

Volatile关键字修饰的变量具有如下特性:

●            变量值可能会随时被修改,编译器无法预知

●            该变量的读写访问是被保护的

    –编译器每次都会从变量地址重新读取数据,而不是直接使用寄存器中的缓存数值

●            编译器将避免优化与该变量相关的读写操作和运算

    –连续两次的赋值操作会被严格执行

这里提供一个简单的示例,如下图所示,假如通过Led变量控制实现Led灯的翻转,但对于编译器而言,这只是一个变量的多次赋值操作,可能会将前几次赋值过程优化掉,而仅执行最后一次的赋值操作。若要控制编译器严格执行每一次的赋值操作,可将此处的Led变量用Volatile关键字修饰。



Volatile关键字主要有3个使用场景:

1、在中断服务程序中会被修改的变量应该使用Volatile修饰

2、在使用到RTOS等的多任务应用场景中,多个任务间共享的变量,即该变量可能被其他任务修改的情况下应加Volatile修饰。

3、在嵌入式应用中,对寄存器的操作涉及硬件状态的改变,需严格执行对该变量的所有操作。所以存储器映射的硬件寄存器通常也使用volatile修饰。

京ICP备:京ICP备05011254号-1 版权归北京麦克泰软件技术有限公司所有
北京麦克泰软件技术有限公司