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关键字表示每次读写该内存单元中的数据时都要到内存单元处去取,而不是读取寄存器中的备份值。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/374361.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在WebLogic 12c上运行RichFaces 4.1.0.Final

您可能已经注意到,我只是喜欢JSF。 不仅是Mojarra的规范和参考实现,而且是市场上最具创意的组件套件。 这是我一直以来最喜欢的PrimeFaces ,当然还有RichFaces 。 这就是为什么在这里找到“在xxx上运行xxx”帖子的原因:)今天是我的RichFaces和…

maven 私服的setting.xml配置

1 <?xml version"1.0" encoding"UTF-8"?>2 <settings xmlns"http://maven.apache.org/SETTINGS/1.0.0" 3 xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation"http://m…

python中的运算符_Python 中的神秘运算符

今天我们来讲讲 Python 里一个不为众人所知的运算符。你可能会觉得疑惑&#xff1a;还有我不知道的运算符&#xff1f;别急着下结论&#xff0c;先往下看看再说。 在 Python3.5 中通过 PEP465https://www.python.org/dev/peps/pep-0465 加入了 运算符&#xff0c;也就是矩阵相乘…

input type:text输入框点击输入,文字消失

<input name"Header1$txbsearch" type"text" value"18912345678" id"Header1_txbsearch" class"txbindex" οnfοcus"if (value 18912345678){value }" οnblur"if (value ){value18912345678}" sty…

C语言开发笔记(一)自动转换和强制转换

整型数据和实行数据之间可以进行运算&#xff0c;而且字符型数据可以和整型数据通用&#xff0c;所以整型、实型、字符型数据之间也是可以进行运算的&#xff0c;但在运算处理之前&#xff0c;不同类型的数据要事先转换成同一种数据类型。转换方法有两种&#xff1a;自动转换和…

Apache Shiro:简化应用程序安全性

考虑到JAVA已有10多年的历史了&#xff0c;对于需要在其应用程序中内置身份验证和授权的应用程序开发人员来说&#xff0c;选择的数量非常少。 在JAVA和J2EE中&#xff0c;JAAS规范是一种尝试解决安全性的问题。 尽管JAAS用于身份验证&#xff0c;但授权部分却过于繁琐而无法使…

Maven 导出依赖Jar,生成source.jar,javadoc.jar

下载最新版的Maven http://maven.apache.org/download.cgi 解压到本地文件夹新建环境变量 MAVEN_HOME maven解压目录在path加入 %MAVEN_HOME%/bin;需要确保已经有Java环境变量 &#xff08;打开cmd java -version,javac -version两个命令看正常不&#xff09;一、导出到默认目…

python提取包含特定字符串的行_python语言----txt中搜索特定字符串所在行

打开IDLE(python)&#xff0c;并新创建一个py文件&#xff0c;编辑内容为&#xff1a; 本示例演示如何在一个txt文件中搜索特定的字符串&#xff0c;并将其行显示# 1. 打开文件# 2. 读取行信息# 3. 判断是否包含关键词# 4. 不包含则循环操作&#xff0c;包含的话将行显示并退出…

asp.net 分布式应用开发

Net Framework推出的许多新技术为上述任务的实现提供了相对简单的解决方案。其中&#xff0c;基于SOAP的Web Service在处理分布式应用时具有比传统的DCOM/CORBA明显的优点&#xff0c;结合基于Web的ASP.NET页面开发技术和SQL Server数据存储技术&#xff08;或Xml文档&#xff…

Spring Data JPA的持久层

1.概述 本文将重点介绍Spring 3.1&#xff0c;JPA和Spring Data的持久层的配置和实现。 有关使用基于Java的配置和项目的基本Maven pom设置Spring上下文的分步介绍&#xff0c;请参阅本文 。 持久性与春天 系列 &#xff1a; 第1部分 – 具有Spring 3.1和Hibernate的持久层 …

C语言开发笔记(三)自加和自减

看到一段代码&#xff0c;被坑了。 #include <stdio.h>int main(void) {int a 7;printf("%d\n", a);printf("%d\n", a--);printf("%d\n", -a);printf("%d\n", -a--);printf("%d\n", a);return 0; } 结果为 -a的逻辑…

求解数独回溯算法

实现的java代码如下&#xff08;该算法只是将结果打印输出&#xff0c;并没有对原数组实现更改&#xff09;&#xff1a; //判断a[i][j]取值val是否有效public boolean isValid(int[][] a, int i, int j, int val){//判断是否跟同行冲突for(int j10;j1<9;j1){if(a[i][j1]val…

python语言属于哪一种语言_Python与Java:你应该学习哪种语言,他们有什么区别?...

在企业招聘中&#xff0c; Python和Java经常是需求最大的编程语言。这两种编程功能强大&#xff0c;灵活且面向对象的语言&#xff0c;通常在组织中和各种其他设置中使用。这可能会导致我们提出一个不可避免的问题&#xff1a;哪个更好&#xff1f; 这是一个复杂的问题&#xf…

关于手机端CSS Sprite图标定位的一些领悟

今天在某个群里面闲逛&#xff0c;看见一个童鞋分享了一个携程的移动端的页面。地址这里我也分享下吧&#xff1a;http://m.ctrip.com/html5/在手机端我都很少用雪碧图合并定位图标&#xff0c;用的比较多就是用字体图标来代替&#xff0c;有些图标不多的时候就自己单个的切出来…

将Java向前推进? 一个定义。 一年回顾。

这篇文章是许多其他“年终”博客文章和评论之一。 但这并不是这样。 我正在尝试总结我在2011年所学到的有关Oracle和Java的知识&#xff0c;还试图解释“将Java向前推进”对我的意义以及我认为应该更好或更简单地改变的东西。 感谢您全年关注我的博客&#xff0c;也感谢您在Twi…

c语言程序源代码_程序的编译、链接和执行

同学们总是抱怨每次见到一道面试题都很难把它转化为程序源代码。然而不幸的是&#xff0c;即使是程序源代码对于计算机来说也还是太高级了。要想让计算机执行一段程序&#xff0c;我们必须把它翻译成最底层的机器指令才行。这其中要经历很多步骤。幸运的是有很多现成的工具可以…

Ubuntu下tftp服务器的搭建

参考博客&#xff1a;http://blog.chinaunix.net/uid-26495963-id-3206829.html1. 安装$ apt-get install tftp-hpa tftpd-hpa2. 建立目录$ mkdir /tftpboot # 这是建立tftp传输目录。$ sudo chmod 777 /tftpboot$ sudo touch test.txt # test.txt文件最好输入内容以便区分3. 配…

【程序员眼中的统计学(1)】信息图形化:第一印象

信息图形化&#xff1a;第一印象 作者 白宁超 2015年10月13日23:23:13 摘要&#xff1a;程序员眼中的统计学系列是作者和团队共同学习笔记的整理。首先提到统计学&#xff0c;很多人认为是经济学或者数学的专利&#xff0c;与计算机并没有交集。诚然在传统学科中&#xff0c;其…

JBoss AS 7.0.2“ Arc”发布–使用绑定选项

有关JBoss AS7方面的更多好消息。 JBoss AS 7.0.2.Final“ Arc”已经发布&#xff01; 自AS 7.0.1发布以来已经过去了一个月。 在这短时间内&#xff0c;已修复了许多错误&#xff0c;并实现了更多功能和改进。 所有这些错误修复和功能已包含在此7.0.2版本中。 此新版本主要包…

C语言开发笔记(五)字符串常量

#include <stdio.h> #include <string.h>int main(void) {char *str "sting";strcpy(str, "hello");printf("%s\n", str);return 0; } 代码为什么会运行错误&#xff0c;异常退出&#xff1f; 这段代码是新手常见错误之一。 定义…