在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

C語言中volatile關鍵字的使用

電子工程師 ? 2018-03-17 11:55 ? 次閱讀

volatile的意思是易變的、可變的,作用是限制編譯器優化某些變量。首先看一段C51程序:

Keil在優化級別是為8時得到如下匯編代碼(部分未列出):

可以看到,變量d的值賦給x,y,z時,只有x中是直接讀取的d中數值,而y=d,z=d則直接將寄存器中的數值賦給y,z。若在此過程中,變量d的值被改變(比如d是一個硬件寄存器),則y,z變量中得到的數據將是錯誤的,因此在某些應用中程序存在隱患。

這類問題并不是編譯器的問題。由于訪問內部寄存器比訪問RAM速度塊,因此編譯器在編譯類似程序時,會對程序進行優化,除第一次編譯變量所在在連續讀取一個變量時,編譯器為了簡化程序,只要有可能就會把第一次讀取的值放在ACC或Rx中,在以后的讀取該變量的值時就直接使用第一次的讀取值。如果該變量的值在此過程中已經被外設(如讀取外部設備端口時經常將外設端口看作一外部RAM地址)或其他程序(如中斷服務程序)所改變,可能就會出錯。為了解決這類問題,常用的方法就是降低編譯器的優化級別或者使用volatile關鍵字。顯然降低優化級別不是所期望的,因此用volatile關鍵字修飾相關變量很有必要。

上文中的例子將d加上volatile關鍵字后,如下:

重新編譯得到的代碼(部分未列出)如下:

可以看這此y,z變量的值是從d的存儲區中讀取的。這主要是由編譯器的優化早成的,而不是編譯器的錯誤。用volatile變量對變量d修飾后,編譯器不對這個變量的操作進行優化,代碼的執行達到期望的目的。

一般說來,volatile關鍵字用在如下的幾個地方。

(1)中斷服務程序中修改的供其他程序檢測的變量需要加volatile。

(2)多任務環境下各任務間共享的標志應該加volatile。

(3)存儲器映射的硬件寄存器通常也要加volatile說明,因為每次對它的讀寫都可能有不同意義。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • volatile
    +關注

    關注

    0

    文章

    46

    瀏覽量

    13242
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    教科書不會講的C語言關鍵字volatile用法

    許多程序員都無法正確理解C語言關鍵字 volatile,這并不奇怪。因為大多數C語言書籍通常都是
    發表于 02-02 10:14 ?638次閱讀

    C語言關鍵字volatile的用法

    許多程序員都無法正確理解C語言關鍵字volatile,這并不奇怪。因為大多數C語言書籍通常都是一
    發表于 04-11 09:35 ?2880次閱讀

    c語言中 volatile _Bool 關鍵字說明

    volatile 關鍵字呢?volatile總是與優化有關,編譯器有一種技術叫做數據流分析,分析程序中的變量在哪里賦值、在哪里使用、在哪里失效,分析結果可以用于常量合并,常量傳播等優化,進一步可以消除一些代碼
    發表于 01-06 10:46

    C語言volatile關鍵字詳解 精選資料分享

    1.volatile和什么有關百度翻譯是這樣子翻譯volatile的:圖1-1 百度翻譯volatile截圖volatile屬于C
    發表于 07-22 07:20

    C語言volatile關鍵字之間有什么關系?

    C語言volatile關鍵字之間有什么關系?
    發表于 11-11 07:01

    C語言中關鍵字static的作用是什么

    C語言中關鍵字static的作用是什么?用預處理指令#define 聲明一個函數,輸入天數得到有多少秒?
    發表于 12-24 06:53

    STM32CubeMX的相關資料分享

    鏈接5中的代碼)1.C語言中volatile關鍵字的學習2.【STM32】HAL庫 STM32CubeMX教程十一—DMA (串口DMA發送接收)3.
    發表于 01-14 07:10

    c語言中volatile關鍵字作用

    一個定義為volatile 的變量是說這變量可能會被意想不到地改變,這樣,編譯器就不會去假設這個變量的值了。精確地說就是,優化器在用到這個變量時必須每次都小心地重新讀
    發表于 06-22 17:04 ?46次下載

    C語言中volatile關鍵字

    volatile關鍵字是一種類型修飾符,用它聲明的類型變量表示可以被某些編譯器未知的因素更改。
    發表于 05-27 09:32 ?3314次閱讀

    單片機C語言中常用到的關鍵字及數據類型

    單片機C語言中常用到的關鍵字及數據類型。
    發表于 11-03 10:57 ?13次下載

    【嵌入式】C語言中volatile關鍵字

    volatile06. 附錄01. volatile概述volatileC語言中的一個關鍵字
    發表于 10-21 10:21 ?6次下載
    【嵌入式】<b class='flag-5'>C</b><b class='flag-5'>語言中</b><b class='flag-5'>volatile</b><b class='flag-5'>關鍵字</b>

    HAL庫STM32串口DMA不定長收發,空閑中斷

    參考了鏈接5中的代碼)1.C語言中volatile關鍵字的學習2.【STM32】HAL庫 STM32CubeMX教程十一—DMA (串口DMA發送接收)3.
    發表于 01-14 10:40 ?19次下載
    HAL庫STM32串口DMA不定長收發,空閑中斷

    C語言中volatile是什么

    C語言時有一個奇怪的關鍵字volatile,這到底有什么用呢?
    的頭像 發表于 02-17 14:29 ?1382次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言中</b>的<b class='flag-5'>volatile</b>是什么

    淺析C語言中的regiseter關鍵字

    C語言中重要的關鍵字有很多,static const extern我們之前都講過,還有一個在面試中出現的頻率也比較高:register。
    的頭像 發表于 08-25 17:10 ?1320次閱讀
    淺析<b class='flag-5'>C</b><b class='flag-5'>語言中</b>的regiseter<b class='flag-5'>關鍵字</b>

    快速掌握C語言關鍵字

    C語言中的32個關鍵字你知道多少個呢?根據關鍵字的作用分為四類:數據類型關鍵字、控制語句關鍵字
    的頭像 發表于 07-06 08:04 ?598次閱讀
    快速掌握<b class='flag-5'>C</b><b class='flag-5'>語言</b><b class='flag-5'>關鍵字</b>
    主站蜘蛛池模板: 日韩亚洲人成在线综合日本 | 88av视频在线观看 | 四虎现在的网址入口 | 午夜三级影院 | 国产精品久久久久久久人热 | 午夜久 | 久久这里只有精品任你色 | 欧美日a| 天天干天天操天天爱 | 逼逼视频网站 | 免费午夜在线视频 | 久久综合狠狠综合久久 | 亚洲国产成人最新精品资源 | 丁香婷婷六月天 | 一级a毛片免费观看 | 可以直接看的黄址 | 美女在线看永久免费网址 | 免费大片黄在线观看日本 | 女人午夜啪啪性刺激免费看 | 国产精品久久久久久久久久免费 | 免费看啪啪的网站 | 午夜在线免费观看视频 | 第四色男人天堂 | 女张腿男人桶羞羞漫画 | 日韩一级高清 | 美女视频大全美女视频黄 | 天天射日日干 | 国产高清免费午夜在线视频 | 国产精品国产三级在线高清观看 | 特级片在线观看 | 综合网激情五月 | ssswww日本免费网站片 | 精品国产污网站在线观看15 | 国产未成女年一区二区 | 国产handjob手交在线播放 | 欲色视频 | 欧美一级免费观看 | 丁香花成人另类小说 | 二区久久国产乱子伦免费精品 | 夜夜精品视频一区二区 | 中国高清色视频www 中国高清性色生活片 |