何为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提供”
Tag:EDA/PLD,eda技术,eda技术实用教程,EDA/PLD
《何为C语言关键字volatile》相关文章
- › 何为C语言关键字volatile
- 在百度中搜索相关文章:何为C语言关键字volatile
- 在谷歌中搜索相关文章:何为C语言关键字volatile
- 在soso中搜索相关文章:何为C语言关键字volatile
- 在搜狗中搜索相关文章:何为C语言关键字volatile
分类导航
最新更新