何为C语言关键字volatile

[09-12 18:28:17]   来源:http://www.88dzw.com  EDA/PLD   阅读:8244

文章摘要:变量flag的值由别的程序更改,这个程序可能是某个硬件中断服务程序。例如:如果某个按钮按下的话,就会对DSP产生中断,在按键中断程序中修改flag为1,这样上面的程序就能够得以继续运行。但是,编译器并不知道flag的值会被别的程序修改,因此在它进行优化的时候,可能会把flag的值先读入某个寄存器,然后等待那个寄存器变为1。如果不幸进行了这样的优化,那么while循环就变成了死循环,因为寄存器的内容不可能被中断服务程序修改。为了让程序每次都读取真正flag变量的值,就需要定义为如下形式:volatile short flag;需要注意的是,没有volatile也可能能正常运行,但是可能修改了编译

何为C语言关键字volatile,标签:eda技术,eda技术实用教程,http://www.88dzw.com

  变量flag的值由别的程序更改,这个程序可能是某个硬件中断服务程序。例如:如果某个按钮按下的话,就会对DSP产生中断,在按键中断程序中修改flag为1,这样上面的程序就能够得以继续运行。

  但是,编译器并不知道flag的值会被别的程序修改,因此在它进行优化的时候,可能会把flag的值先读入某个寄存器,然后等待那个寄存器变为1。如果不幸进行了这样的优化,那么while循环就变成了死循环,因为寄存器的内容不可能被中断服务程序修改。

  为了让程序每次都读取真正flag变量的值,就需要定义为如下形式:

  volatile short flag;

  需要注意的是,没有volatile也可能能正常运行,但是可能修改了编译器的优化级别之后就又不能正常运行了。因此经常会出现debug版本正常,但是release版本却不能正常的问题。所以为了安全起见,只要是等待别的程序修改某个变量的话,就加上volatile关键字。在曹老师的《volatile在多线程中的应用》一文中也举例说明了volatile在多线程中的应用。

  “本文由www.88dzw.com提供”


上一页  [1] [2] 


Tag:EDA/PLDeda技术,eda技术实用教程EDA/PLD

《何为C语言关键字volatile》相关文章

分类导航
最新更新
热门排行