Chinaunix首页 | 论坛 | 博客
  • 博客访问: 95091
  • 博文数量: 153
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 882
  • 用 户 组: 普通用户
  • 注册时间: 2022-03-12 10:39
个人简介

不积小流,无以成江海。

文章分类

全部博文(153)

文章存档

2023年(50)

2022年(90)

我的朋友

分类: C/C++

2022-04-10 21:56:13

Volatile关键字

本意是“易变的”,因为访问寄存器要比访问内存单元快的多,所以编译器一般都做减少存取内存的优化。

加了这个修饰后,系统总是重新从它所在的内存读取数据。

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

本质

编译器的优化

Volatile解释为“直接存取原始内存地址”比较合适,

使用场景

1、  中断服务程序中修改的供其他程序检测的变量需要加volatile

例如:

Static int I = 0;

Int main(void)

{

While(1) {

    If (i) dosomething();

}                           

}

/* interrupt service routine*/

Void ISR_2(void)

{

  I = 1;

}

2、  多任务环境下各任务间共享的标志应该加volatile

3、  存储器映射的硬件寄存器通常也要加volatile

几个问题

1、一个参数可以是const,还可以是volatile吗?

可以的。例如,只读的状态寄存器。

它是volatile,因为它可能被意想不到地改变;

const,因为程序不应该试图是修改它。

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

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

注意

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

阅读(437) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~