需要确认注册邮箱后才能开通博客,立即确认我的邮箱
文章 搜索 高级搜索 ?3? ?3?
  • 滤波器new!
  • LED驱动 new!
  • 新能源 new!
  • PLL
  • PCIE协议
  • 可穿戴
  • LSI
  • FCI
文章 论坛 博客 小组 研讨会
EDN China>EDN论坛>嵌入式系统与软件专区>你了解C语言中的关键字volatile吗?
?
大家在做什么...
楼主 问题:

你了解C语言中的关键字volatile吗?

发布时间:2015-2-1 下午4:26

作者: 众爱妃,随朕回宫

等级: 初学者

积分: 196分

发帖数: 2次

网站总积分: 196分

210分

发送消息

加为好友

查看用户的所有发言

查看用户的个人主页

需要确认注册邮箱后才能下载,立即确认我的邮箱
回复后可下载附件
你了解C语言中的关键字volatile吗?
?
?我们在学习C语言的32个关键字时,大家都不太注意volatile这个关键字,volatile是一个类型修饰符。volatile的中文意思是“易变的”。那么在程序中我们在什么情况下才使用他呢?我们在分析内核时经常看到这个关键字的使用。举例如下:
?
?
view plaincopy to clipboardprint?
?1.struct task_struct { ?
?2. ? ? ? ?volatile long state; ? ?/* -1 unrunnable, 0 runnable, >0 stopped */ ?
?3. ? ? ? ?void *stack; ?
?4. ? ? ? ?atomic_t usage; ?
?5. ? ? ? ?unsigned int flags; ? ? /* per process flags, defined below */ ?
?6. ? ? ? ?unsigned int ptrace; ?
?7........ ?
struct task_struct { volatile long state; /* -1 unrunnable, 0 runnable, >0 stopped */ void *stack; atomic_t usage; unsigned int flags; /* per process flags, defined below */ unsigned int ptrace; .......
?
? ? ? ?在应用程序中,volatile主要是被设计用来修饰被不同线程访问和修改的变量。
?
? ? ? ?volatile的变量是说这变量可能会被意想不到地改变,因此编译器不要进行相应的优化。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。
?
? ? ? 例如:
?
? ? ? extern int a;//语句1 ?假设a是一个全局变量
?
? ? ?......
?
? ? ? int b=a; //语句2
?
? ? ? int c=a; ?//语句3
?
?
?
? ? ? 语句2与语句3中都使用了a的值,优化器在语句3中引用a的值时,认为语句2中已经将a的值读到寄存器中了,并且在语句2与语句3之间没有对a进行修改,因此没必要再到内存中去读a的值,所以直接使用了寄存器中的值。但是如果在语句3执行前,产生了中断,中断恰好对a进行了修改。那么语句3取出来的值就有问题了。
?
? ? ? 如果上面的全局变量a是被修饰为volatile的话,那么优化器就不能去优化语句3,要到内存中去重新取值。
?
?

附件
分享到:? 新浪微博 ?? 微信 ??


打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮

1.扫描左侧二维码
2.点击右上角的分享按钮
3.选择分享给朋友
qq空间 ?? 腾讯微博 ?? 人人网 ?? 百度搜藏 ??
?
引用 回复 收藏 推荐到小组 ( 0) ( 0) 关注

EDN China电子设计技术未来机器人主要芯片将全部采用FPGA,GPU和CPU时代将过去?
第1楼

回复主题:你了解C语言中的关键字volatile吗?

发布时间:2015-2-2 上午8:05

作者:中国的游客

需要确认注册邮箱后才能下载,立即确认我的邮箱
回复后可下载附件
学习了?
引用 回复
( 0) ( 0)


快速回复 高级回复
用户名:?
美国的游客?????? (您将以游客身份发表,请登陆 | 注册) ?
标题: * 标题还可以输入80
评论: * 你还可以输入30000
验证码: ?*?
分享: 新浪微博?? qq空间?? qq微博?? 人人网?? 百度搜藏??
维护专业、整洁的论坛环境需要您的参与,请及时举报违规帖子,如果举报属实,我们将给予相应的积分奖励。
谢谢您的热心参与!
返回嵌入式系统与软件 | 返回专业技术交流区
本论坛仅陈述专家或个人观点,并不代表EDN China 电子技术设计互动社区网站立场。
积分排行榜
彩云 [殿堂级工程师]
mzlr [殿堂级工程师]
特权同学 [殿堂级工程师]
敬请关注EDNC官方微信“edn-china"

每月定期向您递送电子元器件规格书网中的最新元器件数据手册下载、库存信息及技术参数更新。请点击订阅:

2016我的工程师社区
EDN官方QQ群???更多QQ群
  • EDN-深圳 8366025
  • 菜农Cortex-M0技术交流 12047788
  • EDN-哈尔滨 75642591
  • EDN-上海 15156661
  • EDN-广州 57660943
  • EDN-桂林 48813559
  • EDN-武汉 25150805
  • EDN-模拟电路 2837145
  • EDN-通讯 30548292
  • EDN-综合 57490949

促进EDN网友交流合作,方便EDN网友学习沟通

有问题请反馈