volatile常用于多线程共享资源和嵌入式软件的中断。

(一)嵌入式软件中断中volatile的应用

volatile unsigned short g_timer3_count = 0;void TIM3_IRQHandler(void)
{if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET){TIM_ClearITPendingBit(TIM3, TIM_IT_Update);g_timer3_count++;}
}

TIM3_IRQHandler是定时器3的中断服务函数。定时器3配置为每1ms进入一次中断,每次进入全局变量g_timer3_count自加1。

在另一个.c里调用g_timer3_count。

extern volatile unsigned short g_timer3_count;void func(void)
{if(3000 == g_timer3_count){//do something...}
}

如果不使用volatile修饰g_timer3_count的话,很有可能永远进入不了if(3000 == g_timer3_count)的判断里,因为判断里的g_timer3_count的值可能为固定的某个值。

造成这种现象的原因有两种:

1、编译器优化掉了。编译器认为这个变量不会有变化,但实际上在硬件或者多线程中已经改变了。所以要加volatile来告诉编译器这个变量不需要优化,变量的值每次直接从内存读取;

2、变量在其他地方改变,而cash里的值没有改变,每次从cash里面获取。因此也要加volatile,每次不用cash而直接从内存读取。

volatile关键字表示每次读写该内存单元中的数据时都要到内存单元处去取,而不是读取寄存器中的备份值。

C语言开发笔记(二)volatile相关推荐

  1. 【Visual C++】游戏开发笔记二十七 Direct3D 11入门级知识介绍

    游戏开发笔记二十七 Direct3D 11入门级知识介绍 作者:毛星云    邮箱: happylifemxy@163.com    期待着与志同道合的朋友们相互交流 上一节里我们介绍了在迈入Dire ...

  2. c++语言自定义操作符,C++语言复习笔记二

    C++语言复习笔记二 零.OOP 特征:抽象-封装-继承-多态 一.自定义数据类型 1.类 class 类名 { private: 私有成员(本类) public: 公共成员(所有) protecte ...

  3. iOS工程开发笔记二

    iOS工程开发笔记<二> 在Xcode 4, 5的模板工程中可以看到Precompile Prefix Header,但是在Xcode 6被去除了. Xcode 6去掉Precompile ...

  4. 微信小程序开发笔记二(WXSS和CSS样式美化)

    微信小程序开发笔记二(WXSS和CSS样式美化) 一.CSS基本知识 1.Class选择器的定义 2.ID选择器的定义 3.ID选择器和class选择器的区别 4.CSS中设置颜色 5.CSS中的文本 ...

  5. [安卓开发笔记二]android Studio通过jni调用C++代码

    [安卓开发笔记二]android Studio通过jni调用C++代码 16/12/11 更新 此博客基于安卓android studio 1.5所写,现在已经有了android studio2.2的 ...

  6. 【Visual C++】游戏开发笔记二十七 Direct3D 11入门级知识介绍

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处. http://blog.csdn.net/zhmxy555/article/details/7707628 作者:毛星云 邮箱: happ ...

  7. 【Visual C++】游戏开发笔记二十三 游戏基础物理建模 五 粒子系统模拟 二

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 本系列文 ...

  8. 【Visual C++】游戏开发笔记二十三 游戏基础物理建模(五) 粒子系统模拟(二)

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处. http://blog.csdn.net/zhmxy555/article/details/7607916 作者:毛星云    邮箱: h ...

  9. Go语言开发(二)、Go语言基础

    Go语言开发(二).Go语言基础 一.Go语言程序结构 Go语言程序基本结构如下: A.包声明 B.引入包 C.函数 D.变量 E.语句 & 表达式 F.注释 package main //包 ...

  10. 【Visual C++】游戏开发笔记二十五 最简化的DirectX开发环境的配置

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处. http://blog.csdn.net/zhmxy555/article/details/7672101 作者:毛星云    邮箱: h ...

最新文章

  1. 马斯克称特斯拉AutoPilot方案宛如“超人”,首要任务是“不撞车”;网友:???...
  2. 实例分析JAVA CLASS的文件结构
  3. SAP CDS view源代码行数统计工具
  4. 在operator =中要处理“自我赋值”
  5. 图像处理算法工程师——1必备技能总结——2面试题大全
  6. 2021~ 你好,加油 (ง •_•)ง
  7. mingw32位下载以及windows下安装
  8. 移动安全-APK加壳
  9. 统计成绩及格率和优秀率题目
  10. erp实施 数据库面试题_erp实施顾问笔试题有什么_erp实施顾问
  11. xiaok海洋测绘网全新改版(使用emlog)
  12. 和平精英吃鸡捏脸数据助手微信小程序源码
  13. 【mysql】HikariCP不断打印WARN日志Failed to validate connection JDBC4Connectio Possibly consider using a shor
  14. 实现C#和Python高效率混合编程
  15. 玩家必备:QQ宠物升级所需时间明细表(转)
  16. 计算机二战一个双非学校怎样,双非二战学长成功调剂985:看他的调剂院校选择!...
  17. Golang 网络爬虫框架gocolly/colly 四
  18. 清华姚班毕业生开发新特效编程语言,99 行代码实现《冰雪奇缘》,网友:大神碉堡!创世的快乐...
  19. 北大教授出版十一五教材涉抄袭 被判赔4000元
  20. 多语种文字处理的得力助手——BabelPad

热门文章

  1. vbs关不掉的计算机窗口,恶搞之关不掉的窗口.vbs脚本
  2. antd table排序 vue_商品品牌业务之Vue编写前端页面
  3. Myesclipe+SSH+jsp+mysql+tomcate实现一个简单的CRM客户关系管理系统
  4. mysql磁盘临时表清理_mysql 创建大量磁盘临时表
  5. react ant design路由配置
  6. 正则表达式总结及一些有用的例子
  7. 为什么要使用Vuex?
  8. vue获取DOM元素并设置属性
  9. 如何在本地开发环境调试微信 JS-SDK
  10. 解决阿里云OSS跨域问题