volatile用法总结
来源:互联网 发布:c语言二叉树非递归遍历 编辑:程序博客网 时间:2024/05/22 17:07
在用C语言编程时,经常会遇到使用关键字volatile修饰的变量,比如:在单片机头文件中一些寄存器的定义,如#define DDRD (*(volatile unsigned char*)0x31),还有全局变量,如volatile unsigned chartimecnt等。为什么要在这些变量前面加上volatile呢?volatile到底有什么作用?
一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile修饰变量的几个例子;
(1). 并行设备的硬件寄存器(如:状态寄存器)
(2). 一个中断服务子程序中会访问到的非自动变量(Non-automatic variables)
(3). 多线程应用中被几个任务共享的变量
如果一个变量会被其它引用改变,或在其它并行的任务中会被改变(例如中断服务程序),都要显式地说明为"volatile”,否则在编译器优化阶段会作出错误的判断,例如将这个变量读入寄存器以后,在没有对这个变量赋值以前,会一直使用寄存器中的值,而实际上这个变量的值可能已经被一个指针引用改变了,或者是在中断服务程序中被改变了,下面这个例子说明这种错误:
有一个变量cnt,在定时中断中每隔一个固定时间减一,然后在主程序中等待它减到0。
点击看原图
正确的写法应该是将第一句改为:volatile unsigned char cnt;
需要注意:作为一个健壮的程序,一定要注意volatile的用法,否则即使能得到正确结果,也会给程序移植或升级带来意想不到的问题。
- Volatile用法总结
- volatile用法总结
- volatile用法总结
- volatile用法小总结
- volatile关键字用法总结
- volatile变量的 用法总结
- C/C++ volatile关键字用法总结
- C/C++系列: volatile用法总结
- const、volatile、mutable的用法总结
- volatile用法
- volatile用法
- volatile用法
- volatile用法
- volatile用法
- volatile用法
- volatile用法
- volatile用法
- volatile 用法
- 设计模式学习总结1
- PHP码农进化史5 【转】
- 如何迅速搞定一件事(转载)
- sybase 查询表对应的段
- Wince程序内存和存储内存
- volatile用法总结
- 不支持调度模式
- VC中DDB与DIB位图编程
- glassfish v3 配置 db2 连接池
- 怎样在分录中增加F7控件,并进行过滤
- 提高ASP.Net应用程序性能的十大方法
- 数据结构之单链表 C++ 实现
- jquery 常用方法之选项卡tab
- 项目管理系列文章——关于软件工程在软件整个生命周期的位置