色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

    文章

    45

    瀏覽量

    13023
收藏 人收藏

    評論

    相關推薦

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

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

    C語言關鍵字volatile的用法

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

    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 ?3270次閱讀

    單片機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 ?1217次閱讀
    <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 ?1122次閱讀
    淺析<b class='flag-5'>C</b><b class='flag-5'>語言中</b>的regiseter<b class='flag-5'>關鍵字</b>

    快速掌握C語言關鍵字

    C語言中的32個關鍵字你知道多少個呢?根據關鍵字的作用分為四類:數據類型關鍵字、控制語句關鍵字
    的頭像 發表于 07-06 08:04 ?339次閱讀
    快速掌握<b class='flag-5'>C</b><b class='flag-5'>語言</b><b class='flag-5'>關鍵字</b>
    主站蜘蛛池模板: 忘忧草在线影院WWW日本动漫 | 亚洲AV综合99一二三四区| 黄色大片aa| 插曲的痛30分钟视频最新章节| 夜夜躁日日躁狠狠| 色多多污版app下载网站| 久久香蕉国产线看观看首页| 光溜溜的美女直播软件| 60老妇性xxxxhd| 亚洲蜜桃AV永久无码精品放毛片 | 蜜桃日本免费观看MV| 国产一区免费在线观看| 白丝萝莉喷水| 2019夜夜| 亚洲日韩欧美国产专区| 色戒2小时38分在线观看| 男男女女爽爽爽视频免费| 久久草这里全是精品香蕉频线观| 国产成人免费手机在线观看视频| 99国产在线视频有精品视频| 一本道高清到手机在线| 午夜伦伦电影理论片大片| 日韩精品欧美亚洲高清有无| 蜜桃成熟时33D在线嘟嘟网 | 日本人xxxⅹ18hd19hd| 久久久久久久久性潮| 荷兰少归BVBV| 国产精品系列在线一区| 国产AV视频一区二区蜜桃| yellow在线中文| 99精品电影| 2021自产拍在线观看视频 | 51精品国产AV无码久久久密桃 | 亚洲 欧美 中文 日韩 另类| 色99蜜臀AV无码| 青青热久精品国产亚洲AV无码| 六六影院午夜伦理| 久久这里有精品| 久久电影午夜| 精油按摩日本| 精品欧美一区二区三区四区|