在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 3273|回复: 6

[讨论]嵌入式编程中的关键字 valotile 用法 (无内容)

[复制链接]
发表于 2006-2-24 14:22:41 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
 楼主| 发表于 2006-2-24 14:28:34 | 显示全部楼层

[讨论]嵌入式编程中的关键字 valotile 用法 (无内容)

不好意思,打错了是 volatile 的用法
volatile  一般用来修饰变量的
比如 volatile int  a;
发表于 2006-2-25 15:33:40 | 显示全部楼层

[讨论]嵌入式编程中的关键字 valotile 用法 (无内容)

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中则只能依靠硬件的良好设计了。
转自老古论坛
发表于 2006-3-5 14:35:49 | 显示全部楼层

[讨论]嵌入式编程中的关键字 valotile 用法 (无内容)

哦,学习了 :)
发表于 2006-3-8 13:32:07 | 显示全部楼层

[讨论]嵌入式编程中的关键字 valotile 用法 (无内容)

高见
发表于 2006-4-12 14:06:40 | 显示全部楼层

[讨论]嵌入式编程中的关键字 valotile 用法 (无内容)

顶!
发表于 2011-9-6 21:28:53 | 显示全部楼层
valotile类型的变量在编译器优化时会被忽略,正是这一点,才使得在一些程序中设置该类型变量,达到对其的检测
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-12-23 13:07 , Processed in 0.023015 second(s), 9 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表