C语言开发笔记(二)volatile
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相关推荐
- 【Visual C++】游戏开发笔记二十七 Direct3D 11入门级知识介绍
游戏开发笔记二十七 Direct3D 11入门级知识介绍 作者:毛星云 邮箱: happylifemxy@163.com 期待着与志同道合的朋友们相互交流 上一节里我们介绍了在迈入Dire ...
- c++语言自定义操作符,C++语言复习笔记二
C++语言复习笔记二 零.OOP 特征:抽象-封装-继承-多态 一.自定义数据类型 1.类 class 类名 { private: 私有成员(本类) public: 公共成员(所有) protecte ...
- iOS工程开发笔记二
iOS工程开发笔记<二> 在Xcode 4, 5的模板工程中可以看到Precompile Prefix Header,但是在Xcode 6被去除了. Xcode 6去掉Precompile ...
- 微信小程序开发笔记二(WXSS和CSS样式美化)
微信小程序开发笔记二(WXSS和CSS样式美化) 一.CSS基本知识 1.Class选择器的定义 2.ID选择器的定义 3.ID选择器和class选择器的区别 4.CSS中设置颜色 5.CSS中的文本 ...
- [安卓开发笔记二]android Studio通过jni调用C++代码
[安卓开发笔记二]android Studio通过jni调用C++代码 16/12/11 更新 此博客基于安卓android studio 1.5所写,现在已经有了android studio2.2的 ...
- 【Visual C++】游戏开发笔记二十七 Direct3D 11入门级知识介绍
本系列文章由zhmxy555(毛星云)编写,转载请注明出处. http://blog.csdn.net/zhmxy555/article/details/7707628 作者:毛星云 邮箱: happ ...
- 【Visual C++】游戏开发笔记二十三 游戏基础物理建模 五 粒子系统模拟 二
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 本系列文 ...
- 【Visual C++】游戏开发笔记二十三 游戏基础物理建模(五) 粒子系统模拟(二)
本系列文章由zhmxy555(毛星云)编写,转载请注明出处. http://blog.csdn.net/zhmxy555/article/details/7607916 作者:毛星云 邮箱: h ...
- Go语言开发(二)、Go语言基础
Go语言开发(二).Go语言基础 一.Go语言程序结构 Go语言程序基本结构如下: A.包声明 B.引入包 C.函数 D.变量 E.语句 & 表达式 F.注释 package main //包 ...
- 【Visual C++】游戏开发笔记二十五 最简化的DirectX开发环境的配置
本系列文章由zhmxy555(毛星云)编写,转载请注明出处. http://blog.csdn.net/zhmxy555/article/details/7672101 作者:毛星云 邮箱: h ...
最新文章
- 马斯克称特斯拉AutoPilot方案宛如“超人”,首要任务是“不撞车”;网友:???...
- 实例分析JAVA CLASS的文件结构
- SAP CDS view源代码行数统计工具
- 在operator =中要处理“自我赋值”
- 图像处理算法工程师——1必备技能总结——2面试题大全
- 2021~ 你好,加油 (ง •_•)ง
- mingw32位下载以及windows下安装
- 移动安全-APK加壳
- 统计成绩及格率和优秀率题目
- erp实施 数据库面试题_erp实施顾问笔试题有什么_erp实施顾问
- xiaok海洋测绘网全新改版(使用emlog)
- 和平精英吃鸡捏脸数据助手微信小程序源码
- 【mysql】HikariCP不断打印WARN日志Failed to validate connection JDBC4Connectio Possibly consider using a shor
- 实现C#和Python高效率混合编程
- 玩家必备:QQ宠物升级所需时间明细表(转)
- 计算机二战一个双非学校怎样,双非二战学长成功调剂985:看他的调剂院校选择!...
- Golang 网络爬虫框架gocolly/colly 四
- 清华姚班毕业生开发新特效编程语言,99 行代码实现《冰雪奇缘》,网友:大神碉堡!创世的快乐...
- 北大教授出版十一五教材涉抄袭 被判赔4000元
- 多语种文字处理的得力助手——BabelPad