返学费网 > 培训机构 > 南京英贝得嵌入式

025-66911766

全国统一学习专线 8:30-21:00

C中Volatile的用法

Volatile只是C里的一个关键字,为什么需要这个关键字?它有什么作用?一般的讲,只要把一个变量声明为Volatile,也就表示这个变量会出现意想不到的改变,这个时候编译器就不会去假设该变量的值,从而,优化器每次读入的时候都需要重新读取它的值。

Volatile一般用于以下的情况中:

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

2.中断服务程序访问到的非自动变量(全局变量)。

3.多线程里的几个任务共享到的变量。

一般的变量,存储位置在内存中,或者存储在 处理器寄存器中。只要寄存器的内容没有被修改,程序中访问的时候就不再在内存里访问,直接在寄存器里读取。例如下面的例子:

Int temp,a,b;

Temp=(unsigned int *)0x0040;

A=*temp;

B=*temp;

在有的编译器里,这段代码很可能被优化成:

Int temp,a,b;

Temp=(unsigned int *)0x0040;

A=*temp;

B=a;

这样的话,第一次读操作后(a=*temp),*temp的内容有可能更新变化,b的值读的是新变化的值,可是被优化后的程序两次读的结果是一样的,这就是很大的隐患。要想消除这样的隐患,就需要把temp声明Volatile关键字。Temp=( Volatile unsigned int *)0x0040;

程序出现的异常操作是由于程序段的“非原子操作”,在运行中程序被外部中断,后续语句没有继续执行。在嵌入式中,硬件操作的一些寄存器属于收发功能的寄存器,这样为了避免发生错误,一般都要加上Volatile声明。

 

温馨提示:为不影响您的学业,来校区前请先电话咨询,方便我校安排相关的专业老师为您解答
相关资料
  • 热门课程
  • 作者最新文章
  • 在线报名
申请试听课程

只要一个电话
我们免费为您回电

姓名不能为空
手机号格式错误