"); //-->
一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile修饰变量的几个例子;
(1). 并行设备的硬件寄存器(如:状态寄存器)
(2). 一个中断服务子程序中会访问到的非自动变量(Non-automatic variables)
(3). 多线程应用中被几个任务共享的变量
如果一个变量会被其它引用改变,或在其它并行的任务中会被改变(例如中断服务程序),都要显式地说明为"volatile”,否则在编译器优化阶段会作出错误的判断,例如将这个变量读入寄存器以后,在没有对这个变量赋值以前,会一直使用寄存器中的值,而实际上这个变量的值可能已经被一个指针引用改变了,或者是在中断服务程序中被改变了,下面这个例子说明这种错误:
有一个变量cnt,在定时中断中每隔一个固定时间减一,然后在主程序中等待它减到0。
正确的写法应该是将第一句改为:volatile unsigned char cnt;
需要注意:作为一个健壮的程序,一定要注意volatile的用法,否则即使能得到正确结果,也会给程序移植或升级带来意想不到的问题。
专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们
相关推荐
低噪声、高电压 DC/DC 转换器
Nexperia扩展GaN FET产品组合,现可支持更多低压和高压应用中的功率需求
模拟式频率测量仪电路
NS便携式超声波系统完整解决方案
CAN 总线协议2.0版
松翰科技2010新品发布暨方案应用研讨会
CD4051b cd4052b cd4053b单刀双置电子开关
怎么安装arm-elf-tools-cygwin啊?
怎样在55里面实现浮点算法
[原创]ARM JTAG 调试原理
NVIDIA Blackwell加速计算机辅助工程软件,实现实时数字孪生性能数量级提升
英飞凌与Eatron将双方在AI电池管理解决方案方面的合作范围扩展至工业和消费应用领域
为AI部署而生,Solidigm在全球率先推出液冷企业级SSD
有数字显示的电池供电气压计电路
尼得科精密检测科技将参展CPCA Show 2025
罗克韦尔自动化在NVIDIA GTC 2025大会上首次展示Emulate3D Factory Test
频率和时间信号发生器电路
TDK推出电流高达1600mA的车载同轴电缆供电(PoC)电感器
如果婚姻是爱情的坟墓
采用小型封装的隔离型 RS485 收发器和电源
气侯技术公司纷纷采用 NVIDIA Earth-2 用于高分辨率、高能效、更准确的天气预报和备灾工作
转载一篇好贴:万古:沉痛的心 (中国的ARM嵌入式领域)
2010飞思卡尔智能车大赛——摄像头组
时间测量电路
用NE555电路组成的声光型逻辑笔
CA3140 单运算直流放大器
新思科技携手英伟达加速芯片设计,提升芯片电子设计自动化效率
CD4000系列CMOS数字集成电路芯片资料
波士顿动力Atlas机器人超进化:会跳托马斯 动作完美复刻人类
CMOS VLSI设计原理和系统展望(电子书,NLC格式)