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.pswp.cn/news/374361.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/374361.shtml
英文地址,請注明出處:http://en.pswp.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; 這段代碼是新手常見錯誤之一。 定義…