老古开发网首页
导航:老古开发网首页文章索引文章分类单片机→[volatile的作用是什么 作者[hudaidai]©]
| -文章搜索 - 最新文章 - |

volatile的作用是什么 作者[hudaidai]©

发布时间:2005年10月24日 点击次数:6809
来源:   作者:
 
问: 本人新手,看到最新的贴在上,大家在定义变量的时候常常加上volatile,请问加上这个目的是什么,是否加上这个后,变量存 放的位置就会发生变化,谢谢大家 答: volatile的本意是“易变的” 由于访问寄存器的速度要快过RAM,所以编译器一般都会作减少存取外部RAM的优化。比如: static int i=0; int main(void) { ... while (1) { if (i) dosomething(); } } /* Interrupt service routine. */ void ISR_2(void) { i=1; } 程序的本意是希望ISR_2中断产生时,在main当中调用dosomething函数,但是,由于编译器判断在main函数里面没有修改过i,因此 可能只执行一次对从i到某寄存器的读操作,然后每次if判断都只使用这个寄存器里面的“i副本”,导致dosomething永远也不会被 调用。如果将将变量加上volatile修饰,则编译器保证对此变量的读写操作都不会被优化(肯定执行)。此例中i也应该如此说明。 一般说来,volatile用在如下的几个地方: 1、中断服务程序中修改的供其它程序检测的变量需要加volatile; 2、多任务环境下各任务间共享的标志应该加volatile; 3、存储器映射的硬件寄存器通常也要加volatile说明,因为每次对它的读写都可能由不同意义; 另外,以上这几种情况经常还要同时考虑数据的完整性(相互关联的几个标志读了一半被打断了重写),在1中可以通过关中断来实 现,2中可以禁止任务调度,3中则只能依靠硬件的良好设计了。 [fzq21ic]答: 简单点: 就是该变量会以编译器无法预知的方式发生变化,请编译器不要做优化(所有的编译器的优化均假设编译器知道变量的变化规律)

欢迎进入老古论坛进行讨论
[单片机] 相关文章:
学C51的基础 13《 Turbo C 程序设计初步 》 作者[cmh]©
简介:
Turbo C 程序设计初步 本节主要介绍Turbo C程序设计的基本步骤及如何编译、调试和运行源程序。 并给出Turbo C的常用编辑命令。最后介绍Turbo C 编译、连接和运行时的常见错误。 一、Turbo C程序设计基本步骤 程序设计方法包括三个基本步骤: 第一步: 分析问题。 第二步: 画出程序的基本轮廓。 第三步: ......

学C51的基础 12《 函 数 》作者[cmh]©
学C51的基础 11《 枚 举(enum) 》作者[cmh]©
学C51的基础 10《 联 合(union) 》作者[cmh]©
学C51的基础 9 《 指针、结构、联合和枚举 》 作者[cmh]©
学C51的基础 8 《 控制流程语句 》 作者[cmh]©
学C51的基础7《 文件的输入输出函数 》 作者[cmh]©
学C51的基础6 《 输入输出函数及控制流程语句 》 作者[cmh]©
学C51的基础5《 运算符 》 作者[cmh]©
学C51的基础4 《 变 量 》 作者[cmh]©
 
下一个:[自动控制]PID概述
简介:
PID是比例,积分,微分的缩写. 比例调节作用: 是按比例反应系统的偏差,系统一旦出现了偏差,比例调节立即产生调节作用用以减少 偏差。比例作用大,可以加快调节,减少误差,但是过大的比例,使系统的稳定性下降,甚至造成系统的 不稳定。 积分调节作用: 是使系统消除稳态误差,提高无差度。因为有误差,积分调节就进行,直至无差,积分 调节停止,积分调节输出一常值。积分作用的强弱取决与积分时间常数Ti,Ti越小,积分作用就越强。反 之Ti大则积分作用弱,加入积分调节可使系统稳定性下降,动态响应变慢。积分作用常与另两种调节规律 结合,组成PI调节器或PID调节器。 微分调节作用: 微分作用反映系统......
 

上一个:[通信网络]TI携手Airbee推出功耗最低的ZigBee解决方案

老古开发网版权所有 2006年9月 asp.Net V2.0 设计:老古
页面缓存:10分钟 执行时间:16毫秒